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

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

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

作成日: 更新日:

基本的な使い方

pushメソッドは、Thread::SizedQueueクラスのインスタンスに対して、指定されたオブジェクトをキューの末尾に追加するメソッドです。Thread::SizedQueueは、格納できる要素の数に上限が設定されたキューを表します。このpushメソッドを使用することで、複数のスレッド間で安全にデータをやり取りする際に、キューのサイズを適切に管理しながら要素を追加できます。

具体的には、pushメソッドは引数として渡された任意のオブジェクトをキューに追加します。もしキューが現在満杯の状態であった場合、つまり、事前に設定された上限値に達している場合は、キューに空きができるまで、pushメソッドを呼び出したスレッドは処理を一時停止し、待機します。これは、他のスレッドがキューから要素を取り出す(popする)まで、自動的に待機することを意味します。この同期メカニズムにより、キューがいっぱいになることによるデータの上書きや競合状態を防ぎ、スレッド間の安定したデータフローを保証します。

このメソッドは、要素がキューに正常に追加された後に、追加された要素自身を返します。スレッド間の協調処理において、あるスレッドが生成したデータを別のスレッドに安全に引き渡すメカニズムとして非常に重要です。例えば、データの生成速度と処理速度が異なる場合や、限られたリソースの利用を調整したい場合に、SizedQueueとpushメソッドが効果的に活用されます。

構文(syntax)

1queue = Thread::SizedQueue.new(1)
2queue.push("item")

引数(parameters)

object, non_block: false, timeout: nil

  • object: キューに追加するオブジェクト
  • non_block: boolean = false: ブロックせずにキューに追加を試みるか(trueの場合、キューがいっぱいでも例外を発生させずにすぐに返ります)
  • timeout: nil: キューが満杯の場合に待機する最大時間(nilの場合は無期限に待機します)

戻り値(return)

Thread::SizedQueue

Thread::SizedQueue オブジェクト自身が返されます。

関連コンテンツ