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

【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 オブジェクト自身を返します。

関連コンテンツ