我需要实现一个 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/