Rui:ThreadLibrary:BlockingQueue

Rui:ThreadLibrary:BlockingQueue

http://gauche.svn.sourceforge.net/viewvc/gauche/Gauche-threadlib/trunk/concurrent/blocking-queue.scm

<blocking-queue>はproducer-consumerパターンで使われるクラスです。Producerスレッドがブロッキングキューにオブジェクトを追加し、Consumerスレッドがそのキューからオブジェクトを取り出して使います。キューが空の場合、オブジェクトが追加されるまでconsumerはブロックします。キューには最大サイズを設定することもできます。キューが一杯になったところでさらにオブジェクトを追加しようとしたproducerスレッドは、consumerがオブジェクトを取り除いてキューに空きができるまでブロックさせられます。

Producerとconsumerはそれぞれ複数いてかまいません。たとえば1つのproducerが作成したオブジェクトを複数のconsumerが消費するというパターンも考えられます。

ブロッキングキューを使うとスレッドを明示的に同期させる必要がありません。したがってスレッドの同期で生じるバグを避けることができ、プログラムが簡単になります。

APIは基本的にutil.queueに準じます。

More ...