【发布时间】:2014-01-17 18:44:19
【问题描述】:
This commentary page 描述了 GHC 中 STM 的许多细节,但我想澄清几点。
首先,当父级中访问的变量发生变化时,嵌套事务是否失效?
例如我们在线程A:
takeTMVar a `orElse` takeTMVar b `orElse` takeTMVar c
假设A 正在执行嵌套事务takeTMVar b,另一个线程B 执行putTMVar a ();线程A 能否成功完成其嵌套事务,或者它是否无效(这会让我觉得错了)?
第二个点,我想我理解但不介意保证:在上面为A 描述的整个顶级事务被重试并最终阻塞的情况下,是当a、b 或c 中的任何一个发生变化时,A 会被唤醒,这是否正确?
最后作为奖励,如果我们(或库作者)将orElse 更改为infixr,是否会更改上述事务的语义?
【问题讨论】:
标签: haskell concurrency ghc stm