Local variables and threads

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.

Russell.

Russell F. 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.

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

Russell F. 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

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs