【Ruby3.x】Thread::ConditionVariable::signal()メソッドの使い方
signalメソッドの使い方について、初心者にもわかりやすく解説します。
作成日: 更新日:
基本的な使い方
signalメソッドは、Thread::ConditionVariableクラスに属し、複数のスレッドが特定の条件が満たされるまで待機している場合に、その待機中のスレッドの中から一つを選んで実行を再開させるメソッドです。
このメソッドは、あるリソースが利用可能になったり、特定の状態に変化したりした際に、その状態変化を待機していたスレッドに知らせる役割を果たします。例えば、あるデータが準備できた際に、そのデータを待っていた複数のスレッドのうち、どれか一つに次の処理を任せたい場合などに適しています。
通常、Thread::ConditionVariable#waitメソッドによって条件変数上で待機状態に入っているスレッドに対して通知を送ります。signalメソッドは待機しているスレッドの中から一つだけを選んで再開させる点が特徴です。もし、待機している全てのスレッドを再開させたい場合は、broadcastメソッドを使用します。
このメソッドは、スレッド間の競合状態を防ぎながら安全にスレッドを同期させるために、Thread::Mutex(ミューテックス)と組み合わせて使用されることが一般的です。ミューテックスにより排他制御を行い、データの一貫性を保ちながらスレッドの待機と通知を行うことができます。
構文(syntax)
1require 'thread' 2 3mutex = Mutex.new 4cv = Thread::ConditionVariable.new(mutex) 5cv.signal
引数(parameters)
引数なし
引数はありません
戻り値(return)
nil
Thread::ConditionVariable#signal メソッドは、条件変数で待機しているスレッドのうち、1つを起床させます。起床させられたスレッドは、処理を再開します。このメソッドの戻り値はありません。