My threading concern.

A

Aaron Rustad

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.
 
K

Kirk Haines

Aaron said:
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
 
N

Nicholas Seckar

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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top