检查前提条件是否存在原子增量,即原子值小于指定值?

Ale*_*lex 7 c++ atomic atomic-swap c++11 stdatomic

在新标准 C++ 原子递增操作中,在递增值之前检查先决条件是否表明原子值小于指定值?

我可以比下面的代码更容易、更快吗?

int atomic_inc(std::atomic_int& val, int less_than) {
 int new_val;
 int old_val = val.load();
 do
 {
   if (old_val > less_than) return old_val;
   new_val = old_val + 1;
 } while (!val.compare_exchange_weak(old_val, new_val));

 return new_val;
}
Run Code Online (Sandbox Code Playgroud)

如果有人不知道compare_exchange_weak是如何工作的:compare_exchange_weak读取val,与old_val进行比较,如果不相等则将val保存到old_val。如果相等则将new_val保存到val。

Cor*_*ica 1

不,不支持递增小于某个值的值。您的代码尽可能高效。C++11 中没有无等待变体

可能的“如果 X 则增量”模式的数量是无限的。硬件制造商决定“不改则增量”是他们唯一需要支持的。

理论上,您可以发明一个带有特殊汇编代码的硬件平台,但 C++11 并不直接针对它。