8 eventcount() : waiters(0)
15 unsigned cmp = count.load(std::memory_order_relaxed);
21 unsigned cmp = count.fetch_add(0, std::memory_order_seq_cst);
27 unsigned cmp = count.fetch_or(0x80000000,
28 std::memory_order_seq_cst);
29 return cmp & 0x7FFFFFFF;
32 void wait(unsigned cmp)
34 unsigned ec = count.load(std::memory_order_seq_cst);
35 if (cmp == (ec & 0x7FFFFFFF))
38 ec = count.load(std::memory_order_seq_cst);
39 if (cmp == (ec & 0x7FFFFFFF))
49 std::atomic<unsigned> count;
50 rl::var<unsigned> waiters;
52 condition_variable_any cv;
54 void signal_impl(unsigned cmp)
59 while (false == count.compare_exchange_weak(cmp,
60 (cmp + 1) & 0x7FFFFFFF, std::memory_order_relaxed));
61 unsigned w = waiters($);