【发布时间】:2012-04-23 13:51:41
【问题描述】:
有人能解释一下atomicModifyIORef 的工作原理吗?特别是:
(1) 是等待锁定,还是乐观地尝试并在存在争用时重试(如TVar)。
(2) 为什么atomicModifyIORef的签名和modifyIORef的签名不一样?特别是b这个额外的变量是什么?
编辑: 我想我已经找到了 (2) 的答案,因为 b 是要提取的值(如果不需要,可以为空)。在单线程程序中,知道该值是微不足道的,但在多线程程序中,人们可能想知道在应用函数时之前的值是什么。我认为这就是为什么modifyIORef 没有这个额外的返回值(因为modifyIORef 与这个返回值的这种用法可能应该使用atomicModifyIORef。不过,我仍然对(1)的答案感兴趣。
【问题讨论】:
标签: haskell concurrency locking atomic compare-and-swap