In message "[ruby-list:23263] synchronize or lock"
on 00/06/15, 直井 純一 <naoij / highway.ne.jp> writes:
> Thread.start do
> $m.synchronize do # (1)ここでデッドロック?
>#1 $m.lock # #1を外し(1)コメントアウトするとOK
> s = ns
> end
Mutex#synchronize は thread.rb で以下のように定義されています
class Mutex
def synchronize
lock
begin
yield
ensure
unlock
end
end
end
ので,ブロック内で Mutex#lock を呼ぶと当然deadlockになります.
$m.syncronize do
s = ns
end
のように使うのが正解です.
-- gotoken