越水です。

Mutex#synchronizeの使い方が分からず悩んでいます。

下のコードを実行すると:

require 'thread'

class Foo
  def initialize
    @lock = Mutex.new
  end
  
  def meth_out
    @lock.synchronize {
      meth_in
    }
  end
  
  def meth_in
    @lock.synchronize {
      p true
    }
  end
end

Foo.new.meth_out

/usr/local/lib/ruby/1.4/thread.rb:56:in `stop': stopping only thread (ThreadError)
	from /usr/local/lib/ruby/1.4/thread.rb:56:in `lock'
	from /usr/local/lib/ruby/1.4/thread.rb:74:in `synchronize'
	from foo.rb:15:in `meth_in'
	from foo.rb:10:in `meth_out'
	from foo.rb:9:in `synchronize'
	from foo.rb:9:in `meth_out'
	from foo.rb:21

と叱られてしまいます。こうした問題をうまく解決するにはどうしたらいいで
しょうか?

越水
greentea / fa2.so-net.ne.jp