I miss my and local from perl which allowed me to explicitly control the
scope of variables.
Russell.
--
Posted via http://www.ruby-forum.com/.
Only variables prefixed with $ are global ($var and so on).
It is, however, certainly possible to have shared locals
if you have something like
some_var
t1 = Thread.new { ... }
t2 = Thread.new { ... }
Any variables that you define inside the thread block will
be local to that thread, though.
> Russell.
E
A typical problem with threads can be nicely illustrated with this:
09:21:51 [~]: ruby -e 'th=[]
> for i in 0 .. 5
> th << Thread.new do
> sleep(rand(5))
> puts i
> end
> end
> th.each {|t| t.join}
> '
2
5
5
5
5
5
09:22:21 [~]:
Problem here is that all threads share the local var 'i'. Solution:
09:22:21 [~]: ruby -e 'th=[]
> for i in 0 .. 5
> th << Thread.new(i) do |x|
> sleep(rand(5))
> puts x
> end
> end
> th.each {|t| t.join}'
0
1
5
4
2
3
I.e. provide value(s) as arguments to Thread.new and receive them as block
parameter(s) with different name(s).
HTH
Kind regards
robert