X-Git-Url: http://plrg.eecs.uci.edu/git/?p=model-checker-benchmarks.git;a=blobdiff_plain;f=spsc-queue%2Feventcount.h;h=bf1f511a7fb3ec4249a2400b6c6ab8640448bacd;hp=f64946a556138500880f12684e0321802accf86f;hb=6c65f26591800fb20e37ba2a82fb659be07c7d22;hpb=91cb95bde87d2b7023fc2d2e344fba24e6dbca70 diff --git a/spsc-queue/eventcount.h b/spsc-queue/eventcount.h index f64946a..bf1f511 100644 --- a/spsc-queue/eventcount.h +++ b/spsc-queue/eventcount.h @@ -1,12 +1,14 @@ #include +#include +#include class eventcount { public: - eventcount() - : count(0) - , waiters(0) - {} + eventcount() : waiters(0) + { + count = 0; + } void signal_relaxed() { @@ -46,7 +48,7 @@ std::memory_order_seq_cst); private: std::atomic count; rl::var waiters; - mutex guard; + std::mutex guard; condition_variable_any cv; void signal_impl(unsigned cmp) @@ -54,7 +56,7 @@ private: if (cmp & 0x80000000) { guard.lock($); - while (false == count.compare_swap(cmp, + while (false == count.compare_exchange_weak(cmp, (cmp + 1) & 0x7FFFFFFF, std::memory_order_relaxed)); unsigned w = waiters($); waiters = 0;