Threads and external methods

If I have require’d a module and call a method within that module from
within a thread, do all the variables within that external module need
to be made thread safe?

test.rb ==>
require ‘mod’
threads = []
(1…20).each do
threads << Thread.new( var ) { |var|

call a function/method within mod

modFunction( var )
}
threads.each {|a| a.join}

mod.rb ==>
def modFunction( myvar )

do lotsa copmlex stuff with myvar


end

===

Does the ‘myvar’ variable above need to be ‘Thread.current[ “myvar” ]’
instead?

Thanks for helping this noob out!
wd

Hi wd!

If I have require’d a module …

BTW: in Ruby you require a file, which might contain a module
definition.

…and call a method within that module from
within a thread, do all the variables within that external module need
to be made thread safe?

In this context, it doesn’t matter whether the code you execute comes
from an “external” module or not.

test.rb ==>
require ‘mod’
threads = []
(1…20).each do
threads << Thread.new( var ) { |var|

call a function/method within mod

modFunction( var )
}
threads.each {|a| a.join}

Where does the variable “var” which you pass to Thread.new come from?
What value does it have? Are you deliberately using the name “var” as
the name of both a local variable and a block parameter?

mod.rb ==>
def modFunction( myvar )

do lotsa copmlex stuff with myvar


end

===

Does the ‘myvar’ variable above need to be ‘Thread.current[ “myvar” ]’
instead?

I don’t think so. Maybe you can show us a short working example of your
code and tell us what didn’t work as you expected.

Regards,
Pit

Pit C. schrieb:

(…) Maybe you can show us a short working example of your
code and tell us what didn’t work as you expected.

Sorry, what I meant was a short example code that can be executed…

Regards,
Pit