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