Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【Ruby3.x】Thread::ConditionVariable::wait()メソッドの使い方

waitメソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

waitメソッドは、複数のスレッド間で安全に処理を同期させるために、特定の条件が満たされるまで現在のスレッドを待機させるメソッドです。このメソッドはThread::ConditionVariableクラスに属し、通常はThread::Mutexと組み合わせて使用されます。

waitメソッドが呼び出されると、まず引数として渡されたミューテックス(mutex)を一度解放します。これにより、他のスレッドがミューテックスを取得して共有リソースにアクセスしたり、条件を変更したりすることが可能になります。現在のスレッドは、Thread::ConditionVariableオブジェクトに対して別のスレッドからnotifyメソッドやbroadcastメソッドが呼び出されるまで、あるいはオプションのtimeout引数で指定された時間が経過するまで、待機状態に入ります。

待機が終了する(条件が通知されるか、タイムアウトが発生する)と、waitメソッドは再びミューテックスを排他的に取得し直してから、現在のスレッドの実行を再開します。これにより、待機していたスレッドはミューテックスを保持した安全な状態で、条件が満たされた後の処理に進むことができます。

引数mutexは必ず指定する必要があり、これはスレッド間の排他制御を行うためのミューテックスオブジェクトです。オプションのtimeout引数には、待機する最大秒数を指定できます。タイムアウトが発生した場合、waitメソッドは偽(false)を返します。タイムアウトせずに通知によって待機が解除された場合は、真(true)を返します。このメソッドを使うことで、リソースが準備されるのを待つ、イベントの発生を待つといった協調的なスレッド間通信を安全に実現できます。

構文(syntax)

1require 'thread'
2
3mutex = Mutex.new
4condition_variable = Thread::ConditionVariable.new
5
6mutex.synchronize do
7  condition_variable.wait(mutex)
8end

引数(parameters)

mutex, timeout = nil

  • mutex: Thread::Mutex: 条件変数と関連付けられたMutexオブジェクト
  • timeout = nil: Numeric or nil: 待機する最大時間(秒)。nilの場合は無期限に待機

戻り値(return)

nil

Thread::ConditionVariable#wait メソッドは、他のスレッドからの通知を待機するために使用されます。このメソッドは、待機が完了しても値を返しません。

関連コンテンツ