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

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

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

作成日: 更新日:

基本的な使い方

closeメソッドは、Thread::SizedQueueオブジェクトを閉じるために実行するメソッドです。

Thread::SizedQueueは、Rubyにおいて複数のスレッド間でデータを安全にやり取りするための、格納できる要素数に上限が設定されたキューです。このcloseメソッドを呼び出すと、そのSizedQueueが「閉じた」状態になります。これは、もうこれ以上新しい要素の追加を受け付けず、キューとしての役割が終了に向かっていることをシステムに伝えるための重要な操作です。

具体的には、closeが実行された後にpushメソッドを使って要素をキューに追加しようとすると、ThreadErrorというエラーが発生し、要素の追加はできなくなります。一方、キューから要素を取り出すpopメソッドの挙動も変化します。キューが閉じる前は、もしキューが空であればpopメソッドは新しい要素が追加されるまで待機(ブロック)しますが、close後はキューが空になった場合でも待機せずにすぐに処理を返し、nilを返します。これにより、キューの終了後に待機しているスレッドが無限に停止してしまうことを防ぎます。

また、キューの要素の追加や取り出しを待機していたすべてのスレッドは、closeが実行されるとその待機状態から解放されます。このように、closeメソッドは、SizedQueueを通じたスレッド間のデータ連携が完了した際や、プログラムの終了処理の一環として、キューをきれいに閉じ、関連するスレッドの終了を促すために利用されます。既に閉じているSizedQueueに対してcloseを再度呼び出しても、特に影響はありません。

構文(syntax)

1require 'thread'
2
3q = Thread::SizedQueue.new(5)
4q.close

引数(parameters)

引数なし

引数はありません

戻り値(return)

nil

Thread::SizedQueue#closeメソッドは、キューへの追加操作を完了させ、これ以上要素が追加されないことを示します。このメソッドの実行結果として、戻り値はありません。

関連コンテンツ