Haskell 何时保证MVar操作不间断?
描述了哪些操作可以引发异步异常,即使在Haskell 何时保证MVar操作不间断?,haskell,concurrency,exception-handling,Haskell,Concurrency,Exception Handling,描述了哪些操作可以引发异步异常,即使在掩码ed块中也是如此,说明:“以下操作保证不可中断” 如果MVar肯定已满,则取MVar,反之,如果 MVar绝对是空的 从编译器的角度来看,MVar在什么情况下“肯定”是满的还是空的?这是否已经足够好地定义,可以在不处理每个MVar操作上的异步异常的情况下,对代码是否会中断进行推理?编译器没有做出保证,这就是为什么他们这么说的原因 特别是,如果MVar已满,则takeMVar不会阻塞,因此不能中断。同样,对于空的MVar和putMVar,由于它没有阻塞,因
掩码
ed块中也是如此,说明:“以下操作保证不可中断”
如果MVar肯定已满,则取MVar,反之,如果
MVar绝对是空的
从编译器的角度来看,
MVar
在什么情况下“肯定”是满的还是空的?这是否已经足够好地定义,可以在不处理每个MVar
操作上的异步异常的情况下,对代码是否会中断进行推理?编译器没有做出保证,这就是为什么他们这么说的原因
特别是,如果MVar
已满,则takeMVar
不会阻塞,因此不能中断。同样,对于空的MVar
和putMVar
,由于它没有阻塞,因此不能中断
之所以使用这个短语,是因为如果
MVar
不完整,比如说因为它有时完整,有时不完整,那么保证就不再正确。我打赌编译器对MVar一无所知。