gpt4 book ai didi

c - atomic_dec_if_positive 是如何原子化的?

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

所以我正在从 here 的 Linux 源代码中读取 atomic.h (在谷歌上找到的。我不确定它是否合法)而且我无法理解这个:

这怎么是原子的?

static inline int atomic_dec_if_positive(atomic_t *v)
{
int c, old, dec;
c = atomic_read(v);
for (;;) {
dec = c - 1;
if (unlikely(dec < 0))
break;
old = atomic_cmpxchg((v), c, dec);
if (likely(old == c))
break;
c = old;
}
return dec;
}

最佳答案

它使用函数 atomic_read()atomic_cmpxchg(),这肯定会在某个地方使用微处理器指令集的原子性特性以汇编语言实现。

它首先读取一个值并确保它是正数,将读取的值存储在c中,将减后的值存储在dec中并调用atomic_cmpxchg() 将自动执行以下操作:“仅当 *v 中的值等于 时,才将 dec 写入 *v c,并返回*v中的旧值”。这样你就可以确保 *v 中的值在两次原子调用之间没有改变。如果失败并且返回值与 *v 的预期内容不同,它将重试整个过程。

关于c - atomic_dec_if_positive 是如何原子化的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36749839/

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