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

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

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

作成日: 更新日:

基本的な使い方

enqメソッドはThread::Queueオブジェクトに要素を追加するメソッドです。Thread::Queueは、Rubyにおいて複数のスレッド間でデータを安全に受け渡しするためのキュー(待ち行列)を提供します。このenqメソッドを使用することで、任意のオブジェクトをキューの末尾に追加することができます。

プログラミングにおいて、複数の処理を同時に実行する「スレッド」を使う場合、異なるスレッド間でデータを共有したり、受け渡したりする際に、データの整合性を保つための同期処理が必要になります。enqメソッドは、このようなスレッド間のデータ受け渡しにおいて、データが破損したり、意図しない順番で処理されたりするような「競合状態」を防ぐために設計されています。このメソッドはスレッドセーフであるため、複数のスレッドが同時にenqメソッドを呼び出しても、プログラマが明示的にロックなどの複雑な同期機構を実装する必要がなく、安全に要素を追加できます。

enqメソッドは引数として追加したいオブジェクトを受け取ります。また、オプションでnon_blockという引数をtrueに設定できます。non_blockfalse(デフォルト値)の場合、もしキューに容量の制限があり、かつキューが満杯で要素を追加できない状態であれば、キューに空きができるまで処理をブロックして待機します。一方、non_blocktrueに設定すると、キューが満杯の場合、待機せずに即座にThreadError例外を発生させます。これにより、システムの応答性を維持しつつ、キューの状態に応じた柔軟な処理を実装することが可能になります。

構文(syntax)

1q = Thread::Queue.new
2q.enq(object)

引数(parameters)

req

  • req: キューに追加するオブジェクト

戻り値(return)

Object

Thread::Queue#enqは、キューにオブジェクトを追加した際に、そのキュー自身を返します。

関連コンテンツ