projects
/
model-checker-benchmarks.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
changes
[model-checker-benchmarks.git]
/
spsc-queue
/
eventcount.h
diff --git
a/spsc-queue/eventcount.h
b/spsc-queue/eventcount.h
index f64946a556138500880f12684e0321802accf86f..aec3e8c9b216b9d71c9b561287d7d95828386f1a 100644
(file)
--- a/
spsc-queue/eventcount.h
+++ b/
spsc-queue/eventcount.h
@@
-1,12
+1,15
@@
#include <unrelacy.h>
#include <unrelacy.h>
+#include <atomic>
+#include <mutex>
+#include <condition_variable>
class eventcount
{
public:
class eventcount
{
public:
- eventcount()
- : count(0)
- , waiters(0)
-
{
}
+ eventcount()
: waiters(0)
+ {
+ count = 0;
+ }
void signal_relaxed()
{
void signal_relaxed()
{
@@
-37,7
+40,7
@@
std::memory_order_seq_cst);
if (cmp == (ec & 0x7FFFFFFF))
{
waiters += 1;
if (cmp == (ec & 0x7FFFFFFF))
{
waiters += 1;
- cv.wait(guard
, $
);
+ cv.wait(guard);
}
guard.unlock($);
}
}
guard.unlock($);
}
@@
-46,15
+49,15
@@
std::memory_order_seq_cst);
private:
std::atomic<unsigned> count;
rl::var<unsigned> waiters;
private:
std::atomic<unsigned> count;
rl::var<unsigned> waiters;
- mutex guard;
-
condition_variable_any
cv;
+
std::
mutex guard;
+
std::condition_variable
cv;
void signal_impl(unsigned cmp)
{
if (cmp & 0x80000000)
{
guard.lock($);
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;
(cmp + 1) & 0x7FFFFFFF, std::memory_order_relaxed));
unsigned w = waiters($);
waiters = 0;