3

TVar我一直相信s的 GHC 实现是无锁的,但不是无等待的。是否有任何无需等待的实现(例如 Hackage 上的包)?

4

2 回答 2

3

无等待是分布式计算的一个术语。如果一个线程(或分布式节点)能够正确终止,即使来自其他线程的所有输入在任何时候都被延迟/丢失,则 算法是无等待的。

如果您关心一致性,那么您不能保证无等待(假设您总是希望正确终止,即保证可用性)。这是从CAP 定理[1] 得出的,因为等待自由本质上意味着分区容忍。

[1] http://en.wikipedia.org/wiki/CAP_theorem

于 2012-04-20T07:44:23.830 回答
1

您的问题“是否有任何无需等待的实现?” 有点不完整。STM(因此TVar)相当复杂,并且在编译器中内置了支持 - 您无法使用 Haskell 原语正确构建它。

如果您正在寻找任何允许突变并且可以是非阻塞的数据容器,那么您需要IORefs 或MVars (但如果没有可用的值,它们可以阻塞)。

于 2012-04-20T03:01:12.610 回答