2014-03-04 29 views
2

以后的事在RWH书指出队列:writeChan覆盖或最多

如果Chan是空的,readChan块,直到有阅读价值。 writeChan函数永远不会阻塞:立即将新值写入Chan

什么是我不明白是writeChan呼叫是否将覆盖现有消息(假设一些消息尚未阅读),还是会按照正确的顺序排队的消息,以便未读消息ISN失去了?

+1

我不打算发布这个作为答案,因为我不是100%确定这是正确的,但我的理解是,“陈”基本上是一个队列,你推动数据在一边,它出来另一个。你可以很容易地测试这个。我会建议查看Simon Marlow的Haskell书籍中的并行和并行编程,我记得他经历了MVar和Chan的实现。 – bheklilr

+0

你也可以看看只有几行和相当聪明的实现 – jberryman

+1

对于lazy:http://hackage.haskell.org/package/base-4.6.0.1/docs/src/Control-Concurrent-Chan。 HTML –

回答

4

它排队。 Chan是一个可以在其中排队消息的通道。比较而言,MVar可以取而代之只取一个值,表现为变量而不是队列。