gpt4 book ai didi

c - 使用 CAS 以原子方式递增两个整数

转载 作者:太空狗 更新时间:2023-10-29 16:31:17 27 4
gpt4 key购买 nike

显然,可以使用比较和交换指令自动递增两个整数。 This talk声称存在这样的算法,但没有详细说明它的样子。

enter image description here

如何做到这一点?

(请注意,一个接一个递增整数的明显解决方案不是原子的。此外,将多个整数填充到一个机器字中也不算数,因为它会限制可能的范围。)

最佳答案

让我想到顺序锁。不是很准确(根据内存),但大致如下:

令 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)

另见 https://en.wikipedia.org/wiki/Seqlock

关于c - 使用 CAS 以原子方式递增两个整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33083270/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com