How to atomically update a maximum value?
It doesn’t seem to be possible in a single operation, but you can make a loop, that tries to do this, until it finally succeeds or value in atomic variable becomes bigger than value: template<typename T> void update_maximum(std::atomic<T>& maximum_value, T const& value) noexcept { T prev_value = maximum_value; while(prev_value < value && !maximum_value.compare_exchange_weak(prev_value, value)) {} … Read more