instance method Thread::Mutex#synchronize

synchronize { ... } -> object[permalink][rdoc][edit]

mutex をロックし、ブロックを実行します。実行後に必ず mutex のロックを解放します。

ブロックが最後に評価した値を返します。

[EXCEPTION] ThreadError:
self 既にカレントスレッドにロックされている場合に発生します。また、Signal.#trap に指定したハンドラ内で実行した場合に発生します。


m = Mutex.new
result = m.synchronize do
  m.locked? # => true
  # critical part
  "result"
end
m.locked? # => false
result # => "result"