4 eventcount() : waiters(0)
11 unsigned cmp = count.load(std::memory_order_relaxed);
17 unsigned cmp = count.fetch_add(0, std::memory_order_seq_cst);
23 unsigned cmp = count.fetch_or(0x80000000,
24 std::memory_order_seq_cst);
25 return cmp & 0x7FFFFFFF;
28 void wait(unsigned cmp)
30 unsigned ec = count.load(std::memory_order_seq_cst);
31 if (cmp == (ec & 0x7FFFFFFF))
34 ec = count.load(std::memory_order_seq_cst);
35 if (cmp == (ec & 0x7FFFFFFF))
45 std::atomic<unsigned> count;
46 rl::var<unsigned> waiters;
48 std::condition_variable cv;
50 void signal_impl(unsigned cmp)
55 while (false == count.compare_exchange_weak(cmp,
56 (cmp + 1) & 0x7FFFFFFF, std::memory_order_relaxed));
57 unsigned w = waiters($);