Concurrency 什么时候我们应该选择锁定而不是无锁数据结构;

Concurrency 什么时候我们应该选择锁定而不是无锁数据结构;,concurrency,locking,lock-free,Concurrency,Locking,Lock Free,无锁数据结构快速且可扩展。什么时候可以选择在无锁数据结构上实现锁定?无锁数据结构很难实现,因此在性能不受关注的大多数情况下,锁定应该是首选,因为它可以实现可维护性 即使性能是一个问题,无锁的速度也可能是一个例外,而不是常态。以JVM为例:锁已经变得如此先进,以至于许多已经开发的无锁数据结构很容易被更简单的基于锁的替代方案大大超越;当争用率较高时,无锁会迅速退化为负比例 在争用频谱中,低争用最好由无锁处理;通过锁定实现媒体争用;锁避免导致高争用。这些充其量只是经验法则 锁避免可以涵盖从编程模型(如

无锁数据结构快速且可扩展。什么时候可以选择在无锁数据结构上实现锁定?

无锁数据结构很难实现,因此在性能不受关注的大多数情况下,锁定应该是首选,因为它可以实现可维护性


即使性能是一个问题,无锁的速度也可能是一个例外,而不是常态。以JVM为例:锁已经变得如此先进,以至于许多已经开发的无锁数据结构很容易被更简单的基于锁的替代方案大大超越;当争用率较高时,无锁会迅速退化为负比例

在争用频谱中,低争用最好由无锁处理;通过锁定实现媒体争用;锁避免导致高争用。这些充其量只是经验法则

锁避免可以涵盖从编程模型(如分派或参与者)到功能模型的任何内容。后者仍然有些难以捉摸,但也有其成功之处,特别是在正确性值得关注的情况下

一年前,我开发了一个成功的商业微内核,它使用乐观锁定作为基本机制。内核调用将以只读模式通过内核数据结构进行,直到确定结果。此时,它声明了一个标志(comp&swap),并继续更新数据结构。如果一个竞争实体进入内核,这两个实体将继续竞争到断言点。失败者将被重新缠绕以重新启动呼叫,胜利者将继续

这种机制允许非常低的延迟内核,特别是在不太引人注目的硬件上;然而,病态的情况可能会出现,给定的内核调用永远不会完成,或者需要大量冗余处理才能最终竞争。[如果这与linux的rcu(或它所基于的ibms rcu)有点相似,那么是的,尽管它分别比linux和aix早了十年和五年。]

关键在于测量,但拇指法则仍然很有价值