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

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

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

作成日: 更新日:

基本的な使い方

shiftメソッドは、Thread::Queueクラスに属し、キューから要素を取り出すために使用されるメソッドです。Thread::Queueは、複数のスレッドが安全にデータをやり取りするために設計された、先入れ先出し(FIFO: First-In, First-Out)の原則に基づくデータ構造です。このメソッドを呼び出すと、キューの中に最も長く格納されていた要素が一つ取り出され、その要素が戻り値として返されます。

特に重要なのは、shiftメソッドがブロッキング操作である点です。もしキューが空の状態でshiftメソッドが呼び出された場合、キューに新しい要素が追加されるまで、呼び出した側のスレッドは処理を一時停止し、待機します。これにより、データがまだ準備できていない状況で不正なアクセスが行われることを防ぎ、スレッド間の同期を安全に保つことができます。

RubyのThread::Queueはスレッドセーフな設計がされており、複数のスレッドから同時にshiftメソッドを呼び出しても、内部で適切な同期処理が行われるため、データの破損や競合状態の発生を心配することなく利用できます。この特性は、例えば、あるスレッドがデータを生成し、別のスレッドがそのデータを消費するといった「生産者・消費者」モデルの実装において非常に役立ちます。このように、shiftメソッドはスレッド間でのデータの安全な受け渡しを管理する上で不可欠な役割を担っています。

構文(syntax)

1queue = Thread::Queue.new
2queue.push("item_from_queue")
3item = queue.shift

引数(parameters)

non_block = false, timeout: nil

  • non_block: false: ブロックしない場合にtrueを指定します。
  • timeout: nil: タイムアウトまでの秒数を指定します。nilの場合は無制限です。

戻り値(return)

Object

キューの先頭から要素を1つ取り出し、それを返します。キューが空の場合は、nilを返します。

関連コンテンツ