这个评论页面描述了 GHC 中的许多细节STM
,但我想澄清几点。
首先,当父级中访问的变量发生变化时,嵌套事务是否失效?
例如我们在线程中有A
:
takeTMVar a `orElse` takeTMVar b `orElse` takeTMVar c
假设在A
执行嵌套事务takeTMVar b
时,另一个线程B
执行putTMVar a ()
;线程可以A
成功完成其嵌套事务,还是无效(这会让我觉得错了)?
我认为我理解但不介意保证的第二点:在重试上述整个顶级事务A
并最终阻塞的情况下,当任何,或更改A
时将被唤醒是否正确?a
b
c
最后作为奖励,如果我们(或库作者)更改orElse
为,上述事务的语义是否会更改infixr
?