Javaでは、BlockingQueueインタフェースの実装を保持する素敵なパッケージjava.util.concurrentがあります。キューが空の場合 Haskellでのブロックキューの実装
それは
- にできるようになるので、私は、Haskellの中に似た何かを必要とするが、メモリ内のキューの固定サイズを維持(取得)
- 時間箱入りを提供キューが空でタイムアウトを超えた場合にNothingを返します。
- put操作に似ています - キューにタイムボックス付きの容量があるまでのブロック
これはおそらくSTMやトランザクションをブロックして実装することができますが、hackageのようなものは見つけられませんでした。
はい、それはタイムアウトブロックのSystem.Timeoutからのタイムアウトと組み合わせて、jdevelopは彼が求めたものと全く同じです:) – Jedai
Chanは複数のプロデューサ/コンシューマで動作しますか? N個のプロデューサを開始し、それらをブロッキングキューに供給してから、そのキューからデータを取得するM個のコンシューマを開始できますか? AFAIRチャンネルは、単一のプロデューサ - >単一の消費者モデル専用ですが、これは私の場合ではありません。 – jdevelop
Chanは、複数のプロデューサ/コンシューマと完全にうまく動作します(ただし、キューから要素を読み込むと、その要素はなくなりますが、言うことはありません)。 (通常の動作の代わりにdupChanを使用してブロードキャストを取得することができます) – Jedai