13 unsigned cmp = count.load(std::memory_order_relaxed);
19 unsigned cmp = count.fetch_add(0, std::memory_order_seq_cst);
25 unsigned cmp = count.fetch_or(0x80000000,
26 std::memory_order_seq_cst);
27 return cmp & 0x7FFFFFFF;
30 void wait(unsigned cmp)
32 unsigned ec = count.load(std::memory_order_seq_cst);
33 if (cmp == (ec & 0x7FFFFFFF))
36 ec = count.load(std::memory_order_seq_cst);
37 if (cmp == (ec & 0x7FFFFFFF))
47 std::atomic<unsigned> count;
48 rl::var<unsigned> waiters;
50 condition_variable_any cv;
52 void signal_impl(unsigned cmp)
57 while (false == count.compare_swap(cmp,
58 (cmp + 1) & 0x7FFFFFFF, std::memory_order_relaxed));
59 unsigned w = waiters($);