[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Threads and external methods

Wonderdog

2/7/2007 12:47:00 AM

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

2 Answers

Pit Capitain

2/8/2007 2:19:00 PM

0

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 Capitain

2/8/2007 2:45:00 PM

0

Pit Capitain 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