【发布时间】:2018-05-01 07:23:24
【问题描述】:
如何在并发 Haskell 程序中传递异常?
假设我们有一个进程,有多个线程,其中一个正在通过 TCP 连接与某些东西交互,我们得到一个信号(比如在 *nix 系统上)。
这个信号将被传递到哪个(绿色)线程?
它会被传递给正在“使用”套接字的线程还是“主”指定线程将接收并且它必须显式执行throwTo 以将异常发送到该(绿色)线程?
【问题讨论】:
-
Chapter 8 of S. Marlow 的“Haskell 中的并行和并发编程”至少部分涵盖了该主题。
-
GHC wiki 的“RTS 中的信号处理”页面也是相关的ghc.haskell.org/trac/ghc/wiki/Commentary/Rts/Signals
AsyncException类型的文档有一些关于哪些线程可以成为特定异常目标的信息。 hackage.haskell.org/package/base-4.10.1.0/docs/… -
这似乎是安装 SIGINT 顶级处理程序的代码段:github.com/ghc/ghc/blob/… 我们可以看到
UserInterrupt被抛出到主线程。
标签: multithreading haskell exception concurrency exception-handling