Ruby 2.3.0 リファレンスマニュアル > ライブラリ一覧 > monitorライブラリ > Monitorクラス > enter

instance method Monitor#enter

enter -> ()[permalink][rdoc]

MonitorMixin#mon_enter の別名です。

Thread::Mutex#lock に相当します。 Thread::Mutex#lock と違うのは現在のモニターの所有者が現在実行されているスレッドである場合、何度でもロックできる点です。ロックした回数だけ Monitor#exit を呼ばなければモニターは解放されません。



require 'monitor'
mon = Monitor.new
mon.enter
mon.enter

Thread::Mutex#lock ではデッドロックが起きます。

Mutex でデッドロックする例

m = Mutex.new
m.lock
m.lock # => deadlock; recursive locking (ThreadError)