[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

Thread safety

Jeff Turcotte

2/15/2008 6:54:00 PM

With the discussion surrounding merb/rails and thread safety, I've been
somewhat concerned with making my own tiny home-rolled web apps that I
write thread safe, if only to become more knowledgeable on the subject.

I know it's probably hard to generalize, but does anybody have any
simple rules to follow (or resources to share) for writing thread safe
code?

Thanks!
--
Posted via http://www.ruby-....

6 Answers

Steve Ross

2/15/2008 8:09:00 PM

0

On Feb 15, 2008, at 10:54 AM, Jeff Turc wrote:

> With the discussion surrounding merb/rails and thread safety, I've
> been
> somewhat concerned with making my own tiny home-rolled web apps that I
> write thread safe, if only to become more knowledgeable on the
> subject.
>
> I know it's probably hard to generalize, but does anybody have any
> simple rules to follow (or resources to share) for writing thread safe
> code?
>
> Thanks!


Anyone else jump right in here. These are mine:

Rule #1: Don't use global variables.
Rule #2: If you do, when you change them, wrap them in a blocking
mechanism such as a mutex or critical section so two threads can't try
at once.
Rule #3: If you are changing the state of an object that is not thread-
local, wrap the change in a mutex (etc.)

So, for example:

require 'thread'
my_object_sync = Mutex.new

Thread.new do
# just lock on this object
my_object_sync.synchronize do
# Update that is not atomic
end
end

Rule #4: Don't be too sure that any operation in Ruby is atomic.

Robert Klemme

2/15/2008 10:19:00 PM

0

On 15.02.2008 21:08, s.ross wrote:
> On Feb 15, 2008, at 10:54 AM, Jeff Turc wrote:
>
>> I know it's probably hard to generalize, but does anybody have any
>> simple rules to follow (or resources to share) for writing thread safe
>> code?

> Rule #3: If you are changing the state of an object that is not thread-
> local, wrap the change in a mutex (etc.)

Corollary: use thread confinement, i.e. design your app in a way that
most objects are used in a single thread at a time only. Restrict need
for synchronization to the minimum needed.

> Rule #4: Don't be too sure that any operation in Ruby is atomic.

Somehow this reminds me of "Blondie" and "Atomic". :-) Those were the
days...

Cheers

robert

Steve Ross

2/15/2008 10:25:00 PM

0

> Somehow this reminds me of "Blondie" and "Atomic". :-) Those were
> the days...

One way or another :)

Jeff Turcotte

2/15/2008 10:31:00 PM

0

Steve Ross wrote:
>> Somehow this reminds me of "Blondie" and "Atomic". :-) Those were
>> the days...
>
> One way or another :)

I'm gonna getcha!

Thanks guys. big help.
--
Posted via http://www.ruby-....

Jeff Turcotte

2/17/2008 9:55:00 PM

0

For anyone else starting out with threads, I also stumbled across this:

8 Simple Rules for Designing Threaded Applications
http://www.devx.com/go-parallel/Art...

--
Posted via http://www.ruby-....

MenTaLguY

2/21/2008 6:13:00 AM

0

On Mon, 2008-02-18 at 06:55 +0900, Jeff Turc wrote:
> For anyone else starting out with threads, I also stumbled across this:
>
> 8 Simple Rules for Designing Threaded Applications
> http://www.devx.com/go-parallel/Art...

I think this is a good article and I wouldn't mind recommending it to
others.

Thanks Jeff!

-mental