【Ruby3.x】Thread::Mutex::sleep()メソッドの使い方
sleepメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
sleepメソッドは、スレッド間の排他制御を担うThread::Mutexクラスにおいて、現在ミューテックスのロックを保持しているスレッドを一時的に停止させる処理を実行するメソッドです。このメソッドが呼び出されると、まず呼び出し元のスレッドが保持しているミューテックスのロックが一時的に解放されます。これにより、他のスレッドがミューテックスを取得し、保護された共有リソースにアクセスできるようになります。その後、呼び出し元のスレッドは引数で指定された時間だけ休止状態に入ります。時間指定がない場合やnilが渡された場合は、他のスレッドからThread::Mutex#wakeupメソッドが呼び出されるまで無期限に待機します。
スレッドが休止期間を終えるか、wakeupメソッドによって起こされると、そのスレッドは再びミューテックスのロックを取得しようと試みます。ミューテックスの解放、スレッドの待機、そしてロックの再取得という一連の操作が原子的に(アトミックに)行われるため、この間に競合状態が発生する心配がありません。これにより、複雑な条件でのスレッド間通信や、ある特定の条件が満たされるまで安全にスレッドを待機させることが可能になります。一般的なKernel.#sleepとは異なり、ミューテックスと連携して動作することで、より高度なスレッド同期メカニズムを提供する点が特徴です。
構文(syntax)
1require 'thread' 2 3mutex = Thread::Mutex.new 4mutex.sleep(1.0)
引数(parameters)
timeout = nil
- timeout = nil: スレッドをスリープさせる最大時間を秒単位で指定します。nil を指定すると、明示的に中断されるまでスリープし続けます。
戻り値(return)
Integer | nil
Thread::Mutex#sleep メソッドは、スレッドの実行を一時停止させ、再開された時に整数(停止した秒数)を返します。ただし、例外が発生して処理が中断された場合には nil を返します。