目前这完全是理论性的问题,但我一直在试图理解这个问题。以客户端为例,每个连接都有forkIOd线程,其中一个想要退出整个程序(即/exit)。如何将此信息传播到其他线程?
这不是条件,但我假设线程正在读取它们各自的线程,这些线程是阻塞的。由于它们一直处于空闲状态,直到有东西写入它们,它们不能轮询任何类型的“完成”变量。所以我的第一个想法除非完成
是无效的。
我没有想到任何程序的解决方案,因此感谢任何语言的解决方案,但真正的问题是如何在Haskell中实现它。
目前这完全是理论性的问题,但我一直在试图理解这个问题。以客户端为例,每个连接都有forkIOd线程,其中一个想要退出整个程序(即/exit)。如何将此信息传播到其他线程?
这不是条件,但我假设线程正在读取它们各自的线程,这些线程是阻塞的。由于它们一直处于空闲状态,直到有东西写入它们,它们不能轮询任何类型的“完成”变量。所以我的第一个想法除非完成
是无效的。
我没有想到任何程序的解决方案,因此感谢任何语言的解决方案,但真正的问题是如何在Haskell中实现它。
我知道的最好方法是使用毒药,这是由CHP库实现的。
在这里可以看到优秀的解释:http://chplib.wordpress.com/2009/09/30/poison-concurrent-termination/
上述文章顺便介绍了其他解决方案,并解释了它们通常有些脆弱的原因。