【Ruby3.x】Thread::SizedQueue::deq()メソッドの使い方
deqメソッドの使い方について、初心者にもわかりやすく解説します。
作成日: 更新日:
基本的な使い方
deqメソッドはThread::SizedQueueクラスに属し、キューから要素を取り出す操作を実行するメソッドです。
Thread::SizedQueueは、複数のスレッド間でデータを安全にやり取りするための、最大要素数が決められたキュー(待ち行列)です。このメソッドは、キューの先頭にある要素を取り出して返します。
もしキューが空で取り出す要素がない場合、deqメソッドは新しい要素が追加されるまで、呼び出したスレッドの実行を一時停止(ブロック)します。これにより、要素がない状態で無理に処理を進めることを防ぎ、スレッド間の安全な連携を保証します。
オプションとして、non_block: trueを指定することで、キューが空であってもブロックせずに即座に処理を終えることができます。この場合、キューが空であればThreadError例外が発生します。
また、timeoutオプションに数値を指定すると、その秒数だけ要素が追加されるのを待機し、指定時間内に要素が追加されなかった場合はnilを返して処理を終了します。これらの機能により、deqメソッドはスレッド間で安全かつ柔軟にデータをやり取りする上で重要な役割を果たします。
構文(syntax)
1require 'thread' 2 3queue = Thread::SizedQueue.new(5) 4item = queue.deq
引数(parameters)
non_block = false, timeout: nil
- non_block: ブロックせずに即座にキューから要素を取り出すかどうかを指定する真偽値 (デフォルトは false)
- timeout: 要素がキューに追加されるまで待機する最大秒数を指定する数値 (nil の場合は無制限に待機)
戻り値(return)
Object
キューから要素を1つ取り出し、返します。キューが空の場合は、要素が追加されるまでブロックされます。