haskell频道`Control.Concurrent.Chan`对多个读者/制片人来说是否安全?

时间:2012-03-08 10:55:12

标签: haskell concurrency atomic atomicity

我需要将一个并发系统放在一起,在线程之间有一个共享Control.Concurrent.Chan。将只有一个消费者和许多生产者。 查看Chan documentation我没有看到有关可能在同一频道上工作的消费者和制作人数量的任何警告,并且源代码似乎使用MVar s的默认“安全”访问者因此,我认为应该安全地假设不应该有限制,但我不确定。 所以,我的问题是......你知道haskell频道对于多个读者和制作人来说是否安全(一般情况下)吗?

1 个答案:

答案 0 :(得分:11)

它们对任意数量的线程都是安全的。它们是一个简单的基于MVar的链表。设计权衡允许dupChan,这有助于向多个读者广播。

陈很简单,它不计算里面的项目数量,也没有上限。因此,如果生产者超过消费者,那么陈将变得非常大。如果这是一个问题,那么你可以将Chan与(MVar Int)配对。并让生产者和消费者修改Chan中项目的运行总数。