gpt4 book ai didi

c - 如何实现atomic_min?

转载 作者:太空宇宙 更新时间:2023-11-04 06:59:43 24 4
gpt4 key购买 nike

我需要实现一个 atomic_min 函数,相当于:

static void atomic_min(u64 *ptr, u64 value)                                        
{
enter critical section
*ptr = min(*ptr, value);
exit critical section
}

这可以使用 cmpxchg 实现:

static void atomic_min(u64 *ptr, u64 value)                                        
{
u64 old, new;
do {
old = *ptr;
new = min(old, value);
} while (cmpxchg(ptr, old, new) != old);
}

对我来说这看起来效率很低。有没有更好的方法来实现 atomic_min

最佳答案

架构提供的

原子算术指令主要受限于加法/减法和按位运算。 (至少,Linux 内核只为架构无关代码提供了那些操作)。

因为 min不能通过单个加法、减法或按位运算来表达,对于实现“atomic_min”,除了使用cmpxchg 别无选择。 .

关于c - 如何实现atomic_min?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40127017/

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