Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- template<typename T, T COUNT_MIN = std::numeric_limits<T>::min()
- , T COUNT_MAX = std::numeric_limits<T>::max() >
- T SafeIncrement(std::atomic<T> & counter)
- {
- static_assert(MIN < MAX, "range wrong");
- T current = counter.load();
- T result = current == MAX ? MIN : current + 1;
- while(!counter.compare_exchange_strong(current, result))
- {
- result = current == MAX ? MIN : current + 1;
- }
- return result;
- }
Add Comment
Please, Sign In to add comment