From: Caleb Clausen Date: 2008-09-22T07:18:27+09:00 Subject: Re: ThreadError: not owner Hmmm. I'm guessing that the ability to use a Mutex like a semaphore wad taken away when the Mutex class was rewritten in c. A Semaphore class should have then also been added to cover this other use case, if that ability has to be removed, but I don't see one in my installation. Signalling is the other important use case for semaphores besides mutual exclusion. I'd say this is a bug. (But then, who am I?) Luckily for you, there's an implementation of Semaphore in ruby here: http://www.imasy.or.jp/~fukumoto/ruby/semaphore.rb I can't vouch for that code at all. Note that since it's written in ruby, it's going to be very slow, compared to the new mutexes... but then you were using the old (slow) mutexes before so at least you should be no worse off. Also, Thread.critical is very bad for jruby, so don't use this there. You'll have to create a separate variable to hold the semaphore, something like this: (untested!) m=Mutex::new sem=Semaphore.new Thread.new { # something1 sem.signal # something2 } sem.wait m.synchronize{} Maybe you don't even need the mutex at all now. I can't tell from this little example.