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

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

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

作成日: 更新日:

基本的な使い方

deqメソッドは、RubyのThread::Queueクラスに属し、キューから要素を取り出す(デキューする)メソッドです。このメソッドは、複数のスレッド間でデータを安全にやり取りするためのThread::Queueにおいて、格納された要素を一つ取り出す際に利用されます。

キューに要素が格納されていない場合、deqメソッドは、キューに要素が追加されるまで呼び出したスレッドの実行をブロックします。これにより、キューが空の状態でも安全に要素の取り出しを待つことができます。

引数にtrueを渡してdeq(true)のように呼び出すと、非ブロックモードで動作します。この場合、キューが空であれば要素を取り出さずにすぐにnilを返します。キューが空のときにThread::Queue::Empty例外を発生させたい場合は、pop(true)メソッドの利用を検討してください。

deqメソッドは、スレッド間のデータ連携やタスクの割り当てなど、並行処理プログラミングにおいて不可欠な役割を果たします。特に、複数のワーカータスクが共有キューから仕事を取り出して処理するようなシナリオで効果的です。Thread::Queueが提供するスレッドセーフな機構により、データの競合状態を心配することなく、安全に要素を出し入れできます。

構文(syntax)

1require 'thread'
2
3queue = Thread::Queue.new
4queue.enq("要素")
5retrieved_item = queue.deq

引数(parameters)

non_block: false, timeout: nil

  • non_block: boolean = false: ブロックせずに即座にキューから要素を取り出すかどうかのフラグ。true の場合、キューが空なら nil を返します。
  • timeout: Integer or nil = nil: 要素がキューに追加されるまで待機する最大時間(秒)。nil の場合、無期限に待機します。

戻り値(return)

Object

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

関連コンテンツ