projects
/
model-checker-benchmarks.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Makefile: compile the chase-leve deque bugfix
[model-checker-benchmarks.git]
/
mpmc-queue
/
mpmc-queue.h
diff --git
a/mpmc-queue/mpmc-queue.h
b/mpmc-queue/mpmc-queue.h
index fdfbb365164a0ab8ef0ab87e75b044b62cae6388..918415fa99278e0a8cc3d47622f84de00749445c 100644
(file)
--- a/
mpmc-queue/mpmc-queue.h
+++ b/
mpmc-queue/mpmc-queue.h
@@
-36,14
+36,16
@@
public:
if ( wr == rd ) // empty
return false;
if ( wr == rd ) // empty
return false;
- if ( m_rdwr.compare_exchange(rdwr,rdwr+(1<<16),mo_acq_rel) )
+ if ( m_rdwr.compare_exchange
_weak
(rdwr,rdwr+(1<<16),mo_acq_rel) )
break;
break;
+ else
+ thrd_yield();
}
// (*1)
rl::backoff bo;
while ( (m_written.load(mo_acquire) & 0xFFFF) != wr ) {
}
// (*1)
rl::backoff bo;
while ( (m_written.load(mo_acquire) & 0xFFFF) != wr ) {
-
bo.
yield();
+
thrd_
yield();
}
t_element * p = & ( m_array[ rd % t_size ] );
}
t_element * p = & ( m_array[ rd % t_size ] );
@@
-67,14
+69,16
@@
public:
if ( wr == ((rd + t_size)&0xFFFF) ) // full
return NULL;
if ( wr == ((rd + t_size)&0xFFFF) ) // full
return NULL;
- if ( m_rdwr.compare_exchange(rdwr,(rd<<16) | ((wr+1)&0xFFFF),mo_acq_rel) )
+ if ( m_rdwr.compare_exchange
_weak
(rdwr,(rd<<16) | ((wr+1)&0xFFFF),mo_acq_rel) )
break;
break;
+ else
+ thrd_yield();
}
// (*1)
rl::backoff bo;
while ( (m_read.load(mo_acquire) & 0xFFFF) != rd ) {
}
// (*1)
rl::backoff bo;
while ( (m_read.load(mo_acquire) & 0xFFFF) != rd ) {
-
bo.
yield();
+
thrd_
yield();
}
t_element * p = & ( m_array[ wr % t_size ] );
}
t_element * p = & ( m_array[ wr % t_size ] );