9 using std::memory_order_release;
10 using std::memory_order_acquire;
11 using std::memory_order_relaxed;
15 // Sequence for reader consistency check.
17 // It needs to be atomic to avoid data races
22 atomic_init(&seq_, 0);
23 atomic_init(&data_, 0);
28 int old_seq = seq_.load(memory_order_acquire); // acquire
32 int res = data_.load(memory_order_acquire); // acquire
33 if (seq_.load(memory_order_relaxed) == old_seq) { // relaxed
39 void write(int new_data) {
41 // This might be a relaxed too
42 int old_seq = seq_.load(memory_order_acquire); // acquire
46 // Should be relaxed!!!
47 if (seq_.compare_exchange_strong(old_seq, old_seq + 1,
49 memory_order_relaxed)) // relaxed
54 data_.store(new_data, memory_order_release); // release
56 seq_.fetch_add(1, memory_order_release); // release
60 } // namespace cds_others