boo*_*ife 17 c concurrency multithreading atomic compare-and-swap
显然,可以使用比较和交换指令以原子方式递增两个整数.这个谈话声称存在这样的算法,但它没有详细说明它的样子.
如何才能做到这一点?
(注意,一个接一个地递增整数的明显解决方案不是原子的.另外,将多个整数填充到一个机器字中并不算数,因为它会限制可能的范围.)
让我想到顺序锁。不是很准确(从记忆中得出),但大致如下:
令 x、y 和 s 为 64 位整数。
递增:
atomic s++(我的意思是使用 64 位 CAS 操作的原子增量)
memory barrier
atomic x++
atomic y++
atomic s++
memory barrier
Run Code Online (Sandbox Code Playgroud)
读书:
do {
S1 = load s
X = load x
Y = load y
memory barrier
S2 = load s
} while (S1 != S2)
Run Code Online (Sandbox Code Playgroud)
另请参阅https://en.wikipedia.org/wiki/Seqlock