gpt4 book ai didi

multithreading - IORef 和 MVar 有什么区别?

转载 作者:行者123 更新时间:2023-12-03 13:31:59 25 4
gpt4 key购买 nike

我很难理解 Haskell 中 IORef 类型和 MVar 类型之间的基本区别。有人可以帮我解决这个问题吗?他们似乎解决了同样的问题。 MVar 似乎是针对多线程的,但是 IORef 有 atomicModifyIORef 功能。

谢谢!

最佳答案

MVar就像你说的,目标是多线程,而 IORef既可以用作单线程程序中的可变变量,也可以用作多线程程序中的同步构造。
IORef可与 atomicModifyIORef 一起使用获得比较和交换 (CAS) 行为:写入者和读取者可以同步单个纯值,存储在 IORef 中.读者使用readIORef读取一个值,作者使用 atomicModifyIORef写一个值。请注意 atomicModifyIORef不允许编写者在临界区内执行任何副作用(即,他们只能在原子地更改值时使用纯函数)。
MVar允许您实现可能包含副作用的任意关键部分(使用 withMVar )。它们也可以像 IORef 一样使用。 (如上一段所述),但成本更高。

如果你想知道什么样的语义IORef实现它与 Rich Hickey 在关于 Clojure 并发模型的演讲中描述的 CAS 语义相同:http://www.infoq.com/presentations/Are-We-There-Yet-Rich-Hickey

编辑:此外,您不能使用 IORef 遇到死锁。 (但仍然可能存在争用,导致重试)。

关于multithreading - IORef 和 MVar 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5216693/

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