X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=spsc-queue%2Feventcount.h;h=aec3e8c9b216b9d71c9b561287d7d95828386f1a;hb=77847ecd3fa6a643302770491928787ba143cde1;hp=f64946a556138500880f12684e0321802accf86f;hpb=91cb95bde87d2b7023fc2d2e344fba24e6dbca70;p=model-checker-benchmarks.git diff --git a/spsc-queue/eventcount.h b/spsc-queue/eventcount.h index f64946a..aec3e8c 100644 --- a/spsc-queue/eventcount.h +++ b/spsc-queue/eventcount.h @@ -1,12 +1,15 @@ #include +#include +#include +#include class eventcount { public: - eventcount() - : count(0) - , waiters(0) - {} + eventcount() : waiters(0) + { + count = 0; + } void signal_relaxed() { @@ -37,7 +40,7 @@ std::memory_order_seq_cst); if (cmp == (ec & 0x7FFFFFFF)) { waiters += 1; - cv.wait(guard, $); + cv.wait(guard); } guard.unlock($); } @@ -46,15 +49,15 @@ std::memory_order_seq_cst); private: std::atomic count; rl::var waiters; - mutex guard; - condition_variable_any cv; + std::mutex guard; + std::condition_variable cv; void signal_impl(unsigned cmp) { 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;