Files
concurrency-in-action/source/listing_7.18.cpp
2018-10-18 00:40:34 -05:00

18 lines
652 B
C++

template <typename T>
class lock_free_queue {
private:
static void increase_external_count(std::atomic<counted_node_ptr>& counter,
counted_node_ptr& old_counter)
{
counted_node_ptr new_counter;
do {
new_counter = old_counter;
++new_counter.external_count;
} while (!counter.compare_exchange_strong(old_counter,
new_counter,
std::memory_order_acquire,
std::memory_order_relaxed));
old_counter.external_count = new_counter.external_count;
}
};