Russell Fulton wrote: > Is there a way to ensure that a particular variable really is local > to a thread block? I have a problem with a threaded program that > would be explained if one of the local variable was actually global. > I've checked everything I can think of... > > I miss my and local from perl which allowed me to explicitly control > the scope of variables. 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