新しい標準 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 に保存します。