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

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

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

作成日: 更新日:

基本的な使い方

shiftメソッドは、RubyのThread::SizedQueueクラスに属し、サイズ制限のあるキューから要素を安全に取り出す操作を実行するメソッドです。Thread::SizedQueueは、複数のスレッドから同時にアクセスされても安全に動作する、要素数に上限が設けられたキューであり、マルチスレッドプログラミングにおいてスレッド間のデータの受け渡しに利用されます。

このメソッドを呼び出すと、キューの先頭にある最も古い要素が取り出され、その要素が戻り値として返されます。もしキューが現在空である場合、shiftメソッドを呼び出したスレッドは、キューに新しい要素が追加されるまで一時的に処理を停止し、待機します。これにより、キューが空の状態での要素取り出しによるエラーを回避し、スレッド間の協調動作を確実に行うことができます。

また、shiftメソッドにはオプションの引数を指定することが可能です。non_block引数にtrueを渡した場合、キューが空であってもスレッドはブロックされずに、直ちにThreadError例外を発生させます。これは、キューが空の場合にすぐにその状態を把握し、待機せずに別の処理に進みたい場合に有用です。さらに、timeout引数に数値を秒数で指定すると、その時間内だけ要素が追加されるのを待ち、指定された時間内に要素が得られなかった場合もThreadError例外が発生します。この機能は、無期限の待機を避けたい場合や、特定の時間制限内に処理を完了させたい場合に役立ちます。

shiftメソッドは、主にプロデューサー・コンシューマーモデルなど、複数のスレッドが協調してデータを処理するような場面で、データの安全な取り出しを保証するために重要な役割を果たします。

構文(syntax)

1queue = Thread::SizedQueue.new(1)
2queue.push("element_to_shift")
3shifted_element = queue.shift

引数(parameters)

timeout: nil, non_block: false

  • timeout: nil: キューから要素を取り出すのを待つ最大秒数を指定します。nil(デフォルト)の場合は、要素が利用可能になるまで無期限に待ちます。
  • non_block: false: trueの場合、要素が利用可能でなくても例外を発生させ、待機しません。false(デフォルト)の場合は、要素が利用可能になるまで待機します。

戻り値(return)

Object

スレッドセーフなキューから要素を1つ取り出して返します。キューが空の場合は、要素が追加されるまでブロックされます。

関連コンテンツ