显然,可以使用比较和交换指令自动递增两个整数。 This talk声称存在这样的算法,但没有详细说明它的样子。
如何做到这一点?
(请注意,一个接一个递增整数的明显解决方案不是原子的。此外,将多个整数填充到一个机器字中也不算数,因为它会限制可能的范围。)
最佳答案
让我想到顺序锁。不是很准确(根据内存),但大致如下:
令 x、y 和 s 为 64 位整数。
递增:
atomic s++
(我的意思是使用 64 位 CAS op 的原子增量)
memory barrier
atomic x++
atomic y++
atomic s++
memory barrier
阅读:
do {
S1 = load s
X = load x
Y = load y
memory barrier
S2 = load s
} while (S1 != S2)
关于c - 使用 CAS 以原子方式递增两个整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33083270/