Есть ли в новой стандартной операции атомарного приращения С++ предварительные условия проверки перед увеличением значения, чтобы атомарное значение было меньше указанного значения?
Могу ли я сделать это проще и быстрее, чем следующий код?
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.
increment_if_zero_mod_two
и т. д.). - person Kerrek SB   schedule 08.12.2012val
изменить после того, как он будет прочитан вold_val
, это будет бесконечный цикл. - person djechlin   schedule 08.12.2012auto old= atomicint++; if (old<less_than) { . . .
. - person Johan Lundberg   schedule 24.04.2016