在java中,有一个很好的包java.util.concurrent,它保存了BlockingQueue接口的实现。
我在Haskell中需要类似的东西,所以它能够
可能这可以通过STM或阻止交易来实现 - 但我无法在hackage上找到类似的东西。
答案 0 :(得分:7)
在Haskell中,并发队列通常被称为Chan
(通道),正如您所料,确实a BoundedChan package on Hackage看起来应该符合您的需求,除了超时。但是,您应该可以使用System.Timeout。
答案 1 :(得分:3)
我需要发出一个小小的警告。 BoundedChan的来源表明它不是例外安全的。如果你知道你是免费的例外,例如你避免killThread,那么这将没关系。如果您想要一个防弹库,那么您将需要改进BoundedChan。异常安全库将使用withMVar
或bracket
而不是takeMVar
和putMVar
。
使用STM可以避免大多数异常安全问题,这可以由System.Timeout组成。此外,超时已在Hackage上包含了几种方式。
答案 2 :(得分:3)
stm-chans包中包含各种STM通道。它似乎比所提到的BoundedChan软件包(最近在2009年更新)更积极地维护,并且由于它使用STM,它将是异常安全的。
我相信其TBChan
变体与System.Timeout
一起符合您的所有要求。