【Ruby3.x】Thread::SizedQueue::enq()メソッドの使い方
enqメソッドの使い方について、初心者にもわかりやすく解説します。
作成日: 更新日:
基本的な使い方
enqメソッドは、RubyのThread::SizedQueueクラスに定義された、キューに要素を追加するメソッドです。
このメソッドの主な役割は、指定されたオブジェクトをキューの末尾に格納することです。Thread::SizedQueueは、格納できる要素の数に上限が設定されている点が特徴であり、enqメソッドはこの上限と密接に関連しています。具体的には、enqメソッドを呼び出した時点でキューがすでに最大サイズに達している場合、新しい要素を追加するスペースが空くまで、つまりキュー内の他の要素がdeq(デキュー)されるまで、処理を一時停止(ブロック)します。この特性により、キューが過剰なデータで溢れるのを防ぎ、システムのリソース消費を適切に制御できます。
また、Thread::SizedQueueは複数のスレッド間で安全にデータをやり取りするために設計されており、enqメソッドもスレッドセーフな操作を提供します。これにより、複数のスレッドが同時にキューに要素を追加しようとしても、データの破損や競合状態が発生することなく、安全に処理を進めることが可能です。
enqメソッドには、<<(左シフト演算子)やpushといったエイリアス(別名)も存在し、これらを使用しても同じようにキューに要素を追加できます。このメソッドは、複数のスレッドが協調してタスクを実行するような、生産者と消費者モデルの実装において特に有用です。
構文(syntax)
1queue.enq(object)
引数(parameters)
object, non_block: false, timeout: nil
- object: キューに追加するオブジェクト
- non_block: true に設定すると、キューが満杯の場合に例外を発生させます。デフォルトは false です。
- timeout: キューが満杯の場合に待機する最大秒数。nil の場合は無期限に待機します。
戻り値(return)
self
enq メソッドは、レシーバである Thread::SizedQueue オブジェクト自身を返します。