这在这一点上完全是理论上的,但我一直在努力解决这个问题。让我们以一个客户端为例。每个连接都有forkIOd线程,其中一个线程想要退出整个程序(即,/exit)。如何将此信息传播到其他线程?
这不是一个条件,但我假设线程正在从它们各自阻塞的线程中读取数据。因为它们在为它们写东西之前一直处于空闲状态,所以它们不能轮询任何类型的“完成”变量。因此,我的第一个想法是unless done被搁置了。
我没有任何程序的解决方案,所以任何人都可以提供任何语言的解决方案,但真正的问题是如何在Haskell中做到这一点。
发布于 2010-09-22 12:36:49
我所知道的最好的方法是毒药,它是由CHP库实现的。
请看这里的精彩解释:http://chplib.wordpress.com/2009/09/30/poison-concurrent-termination/
上面的文章顺便介绍了其他解决方案,并解释了为什么它们通常比较脆弱。
https://stackoverflow.com/questions/3766299
复制相似问题