我需要将线程之间具有一个共享Control.Concurrent.Chan的并发系统组合在一起。将只有一个消费者和多个生产者。查看Chan documentation,我没有看到任何关于可能在同一通道上工作的消费者和生产者数量的警告,而且源代码似乎对MVar使用了默认的“安全”访问器,因此我认为假设不应该有限制是安全的,但我不确定。所以,我的问题是...请问您是否知道haskell通道对于多个读者和生产者(通常)是安全的?
发布于 2012-03-08 19:05:04
它们对于任意数量的线程都是安全的。它们是一个简单的基于MVar的链表。设计上的权衡考虑到了dupChan,这在向多个阅读器广播的相反情况下是有帮助的。
Chan是如此简单,它没有计算里面的项目数量,也没有上限。因此,如果生产者跑得比消费者快,那么Chan将变得非常非常大。如果这是一个问题,那么您可以将Chan与(MVar Int)配对。并让生产者和消费者修改Chan中项目的运行总数。
https://stackoverflow.com/questions/9616515
复制相似问题