23template <
typename T,
typename Func>
25 T old_value = atomic.load();
28 const T new_value = updater(T{old_value});
31 if (old_value == new_value) {
35 if (atomic.compare_exchange_weak(old_value, new_value)) {
48 return utils::AtomicUpdate(atomic, [value](T old_value) {
return value < old_value ? value : old_value; });
58 return utils::AtomicUpdate(atomic, [value](T old_value) {
return old_value < value ? value : old_value; });