gpt4 book ai didi

Haskell:TVar 是如何工作的?

转载 作者:行者123 更新时间:2023-12-04 13:33:50 24 4
gpt4 key购买 nike

TVar 是如何工作的?从我读过的内容来看,它会在收到它们后立即尝试运行所有事务,但是,完成的事务会使其他当前正在运行的事务无效,然后必须重新启动。 TVar 是这样工作的吗?

如果是这种情况,如果每 100 毫秒发生 1 毫秒长的事务,这是否意味着需要 200 毫秒来处理的事务永远不会完成?

最佳答案

只要两个事务访问不同的TVars ,它们都可以同时提交而不会相互失效。

为了明确交易何时失效,让我们考虑以下场景:

  • 假设 t :: TVar Int初始化为 0并通过 readTVar t 读取在交易开始时A .
  • 同时,在另一个线程中,事务 B开始于其中 writeTVar t 1被执行。假设 BA 之前提交. STM 系统会检查是否有任何不一致,并得出结论是安全的 B在这一点上提交,所以现在 writeTVar t 1变得有效。
  • 但是,这会导致事务 A从旧值 0 开始失效的 tA 的开头阅读. (如果允许 A 提交,我们将违反原子性。)

  • 关于 Haskell 的 STM 系统(参见第 6.5 节)的原始论文 [1] 回答了您的问题:

    "Starvation is possible. For example, a transaction that runs for a very long time may repeatedly conflict with shorter transactions. We think that starvation is unlikely to occur in practice, but we cannot tell without further experience."



    [1] 蒂姆·哈里斯、西蒙·马洛、西蒙·佩顿·琼斯和莫里斯·赫利希。 ACM 并行编程原理与实践 session 2005 (PPoPP'05)。

    关于Haskell:TVar 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10092655/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com