From: Mido Peace Date: 2010-02-15T23:46:54+09:00 Subject: Re: Mutex require 'thread' class Semaphore Thread.abort_on_exception = true attr_accessor :permits, :mutex, :cv def initialize ( permits ) @permits = permits @mutex = Mutex.new @cv = ConditionVariable.new end def acquire() raise "Interrupted Thread " if (!Thread.current.alive?) @mutex.synchronize { while @permits < 1 @cv.wait(@mutex) end @permits = @permits - 1 } end def release() @mutex.synchronize{ @permits += 1 @cv.signal } end end ... class Process < Thread ... def initialize() super(){ ... @sem=Semaphore.new(0) ... } end def run() ... @sem.acquire() end The problem is that I should call the semaphore later , not within initialization of the process !! -- Posted via http://www.ruby-forum.com/.