什么时候MVar操作保证不会中断?

时间:2014-01-03 17:33:13

标签: haskell concurrency exception-handling

documentation for Control.Exception 描述哪些操作可以抛出异步异常,即使在mask ed块中也是如此,它说:“以下操作保证不可中断”

  

如果MVar肯定是满的,则选择MV,如果是,则反过来放入MVar   MVar肯定是空的

在什么情况下编译器的观点是MVar“肯定是满的还是空的?这是否足够好定义,以便能够推断我的代码是否会在每次MVar操作时都不会处理异步异常而中断?

1 个答案:

答案 0 :(得分:4)

编译器没有做出这种保证,这就是他们这么说的原因。

具体而言,如果MVar已满,则takeMVar不会阻止,并且不会被中断。类似地,对于空MVarputMVar,由于它没有阻塞,因此无法中断。

使用短语是因为如果MVar未满,说因为它有时是满的,有时不是,那么保证不再是真的。