TVar
我一直相信s的 GHC 实现是无锁的,但不是无等待的。是否有任何无需等待的实现(例如 Hackage 上的包)?
问问题
351 次
2 回答
3
无等待是分布式计算的一个术语。如果一个线程(或分布式节点)能够正确终止,即使来自其他线程的所有输入在任何时候都被延迟/丢失,则 算法是无等待的。
如果您关心一致性,那么您不能保证无等待(假设您总是希望正确终止,即保证可用性)。这是从CAP 定理[1] 得出的,因为等待自由本质上意味着分区容忍。
于 2012-04-20T07:44:23.830 回答
1
您的问题“是否有任何无需等待的实现?” 有点不完整。STM(因此TVar
)相当复杂,并且在编译器中内置了支持 - 您无法使用 Haskell 原语正确构建它。
如果您正在寻找任何允许突变并且可以是非阻塞的数据容器,那么您需要IORef
s 或MVar
s (但如果没有可用的值,它们可以阻塞)。
于 2012-04-20T03:01:12.610 回答