From: Robert Klemme Date: 2009-05-10T21:10:05+09:00 Subject: Re: Thread and Mutex in Ruby 1.8.7 On 09.05.2009 14:32, Sandor Szücs wrote: > On 05.05.2009, at 14:35, Guillaume Gdo wrote: > >> mutex=Mutex.new >> mutex.synchronize do >> mutex.synchronize do >> puts "A" >> puts "B" >> end >> end > > Mutex is not reentrant. > > irb> m=Mutex.new > irb> m.synchronize do > irb> puts "foo" > irb> m.synchronize do > irb> puts "bar" > irb> end > irb> end > foo > ThreadError: thread 0x341ac tried to join itself > from (irb):4:in `synchronize' > from (irb):4 > from (irb):2:in `synchronize' > from (irb):2 > > >> Nevertheless my thread have a lock on the mutex. How to reuse it ? > > > Use Monitor instead of Mutex. > > irb> m=Monitor.new > irb> m.synchronize do > irb> puts "foo" > irb> m.synchronize do > irb> puts "reentrant" > irb> end > irb> end > foo > reentrant And then there is also MonitorMixin which adds monitor functionality to every class or instance. Kind regards robert -- remember.guy do |as, often| as.you_can - without end http://blog.rubybestpractices.com/