[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

My threading concern.

Aaron Rustad

4/9/2005 7:29:00 PM

When two theads enter a method that can change a value of an instance
variable, does the possiblity exist that one thread's changes will
clobber the other's?

The reason stems from the ApplicationController of Rails, when a
request is received, the request is handled by a method that has access
to instance variables (session, request, params). Coming from the
Java/Struts world, this is a concern, and methods should not access
instance variables.

Is there a different model of theading in Ruby, or, would I be missing
something in Rails.

thanks!
AR.

2 Answers

khaines

4/9/2005 8:14:00 PM

0

Aaron Rustad wrote:

> When two theads enter a method that can change a value of an instance
> variable, does the possiblity exist that one thread's changes will
> clobber the other's?
>
> The reason stems from the ApplicationController of Rails, when a
> request is received, the request is handled by a method that has access
> to instance variables (session, request, params). Coming from the
> Java/Struts world, this is a concern, and methods should not access
> instance variables.
>
> Is there a different model of theading in Ruby, or, would I be missing
> something in Rails.

Threading is no different in Ruby than it is in other languages, with regard
to guarding against concurrent access.

If there is a section of code that should only be accessed in a serial
fashion, control that access with a Mutex:

m = Mutex.new
m.synchronize do
@foo.update
@bar.count += 1
end

Ruby provides a rich set of support beyond mutexes for dealing with
threading issues, should you need them.


Kirk Haines

Nicholas Seckar

4/9/2005 8:21:00 PM

0

On Saturday 09 April 2005 15:29, Aaron Rustad wrote:

> The reason stems from the ApplicationController of Rails, when a
> request is received

[continuing] a new Controller instance is created, and the related instance
variables are those of this new instance. A controller instance is not reused
for multiple requests.

If you'd like to read the source, see actionpack/lib/action_controller/base.rb
Look for "def process" -- it a class method of Controller.

--

Nicholas Seckar aka. Ulysses