Group: comp.lang.ruby
From: "s.ross"
Date: Friday, February 15, 2008 2:08 PM
Subject: Re: Thread safety

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.