gpt4 book ai didi

multithreading - Haskell STM 并重试

转载 作者:行者123 更新时间:2023-12-02 06:53:45 28 4
gpt4 key购买 nike

当我们运行 STM 表达式时,它命中了 retry,线程被阻塞,如果条目被修改,事务将再次运行。

但我想知道:

  • 如果我们读取一个 STM 变量,但在导致重试的特定分支中实际未使用该变量,更新它是否会尝试再次执行事务?

  • 虽然线程被阻塞了,但它真的被阻塞了吗?还是在线程池中回收以供其他可能等待的操作使用?

最佳答案

  1. 是的。读取 STM 变量将调用 stmReadTVar - 参见 here .这将在交易记录中生成新条目,并将在提交时进行检查。如果你看看here您会发现 ReadTVarOp 被标记为具有副作用的操作 (has_side_effects = True),所以我认为无论您是否使用它结果,编译器都不会消除它。
  2. 正如@WillSewell 所写,Haskell 使用绿色线程。您甚至可以在单线程运行时使用 STM,而不必担心实际操作系统线程会被阻塞。

关于multithreading - Haskell STM 并重试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36334718/

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