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に準じます。
- make-blocking-queue
- blocking-queue?
- blocking-queue-empty?
- blocking-queue-push!
- blocking-queue-enqueue!
- blocking-queue-pop!
- blocking-queue-dequeue!
- blocking-queue-dequeue-all!
- blocking-queue-front
- blocking-queue-rear
- blocking-queue-length
- blocking-queue-remaining-capacity