在新的标准 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;
}
如果有人不知道 compare_exchange_weak 的工作原理: compare_exchange_weak 读取 val,与 old_val 进行比较,如果它们不相等,则将 val 保存到 old_val。如果相等,则将 new_val 保存到 val。