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。
不,不支持递增小于某个值的值。您的代码尽可能高效。C++11 中没有无等待变体
可能的“如果 X 则增量”模式的数量是无限的。硬件制造商决定“不改则增量”是他们唯一需要支持的。
理论上,您可以发明一个带有特殊汇编代码的硬件平台,但 C++11 并不直接针对它。
| 归档时间: |
|
| 查看次数: |
3698 次 |
| 最近记录: |