阻塞Haskell中的队列实现

jde*_*lop 5 haskell blockingqueue

在java中,有一个很好的包java.util.concurrent,它保存了BlockingQueue接口的实现.

我在Haskell中需要类似的东西,所以它能够

  • 在内存中保持队列的固定大小
  • 队列为空时阻止读取操作(get)
  • 提供有时间限制的块,如果队列为空且超出超时,则将返回Nothing
  • 类似于put操作 - 阻塞直到队列具有带时间框版本的容量

可能这可以通过STM或阻止事务来实现 - 但我无法在hackage上找到类似的东西.

ham*_*mar 7

并发队列通常Chan在Haskell中称为(通道),正如您所料,Hackage上确实存在一个BoundedChan包,看起来它应该符合您的需求,除了超时.但是,您应该可以通过使用System.Timeout来获得它.

  • Chan与多个生产者/消费者完美配合(虽然当你从队列中读取一个元素时它已经消失了,但我想这不用说)是什么让你认为渠道是针对单一生产者 - >单一消费者?(您可以利用dupChan来获取广播而不是正常行为) (2认同)

ehi*_*ird 3

stm-chans软件包包含多种 STM 通道。它似乎比 hammar 提到的 BoundedChan 包(最后一次更新于 2009 年)得到了更积极的维护,并且由于它使用了 STM,它将是异常安全的。

我相信它的TBChan变体与 结合使用System.Timeout,可以满足您的所有要求。