projects
/
model-checker-benchmarks.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
mpmc-queue: fixup compilation
[model-checker-benchmarks.git]
/
mpmc-queue
/
mpmc-queue.h
diff --git
a/mpmc-queue/mpmc-queue.h
b/mpmc-queue/mpmc-queue.h
index bef0f324cfc368e94533eb67e509b5787074f354..fdfbb365164a0ab8ef0ab87e75b044b62cae6388 100644
(file)
--- a/
mpmc-queue/mpmc-queue.h
+++ b/
mpmc-queue/mpmc-queue.h
@@
-7,7
+7,7
@@
struct mpmc_boundq_1_alt
private:
// elements should generally be cache-line-size padded :
private:
// elements should generally be cache-line-size padded :
-
nonatomic<t_element>
m_array[t_size];
+
t_element
m_array[t_size];
// rdwr counts the reads & writes that have started
atomic<unsigned int> m_rdwr;
// rdwr counts the reads & writes that have started
atomic<unsigned int> m_rdwr;
@@
-17,13
+17,16
@@
private:
public:
public:
- mpmc_boundq_1_alt()
: m_rdwr(0), m_read(0), m_written(0)
+ mpmc_boundq_1_alt()
{
{
+ m_rdwr = 0;
+ m_read = 0;
+ m_written = 0;
}
//-----------------------------------------------------
}
//-----------------------------------------------------
-
nonatomic<t_element>
* read_fetch() {
+
t_element
* read_fetch() {
unsigned int rdwr = m_rdwr.load(mo_acquire);
unsigned int rd,wr;
for(;;) {
unsigned int rdwr = m_rdwr.load(mo_acquire);
unsigned int rd,wr;
for(;;) {
@@
-33,7
+36,7
@@
public:
if ( wr == rd ) // empty
return false;
if ( wr == rd ) // empty
return false;
- if ( m_rdwr.compare_exchange
_weak
(rdwr,rdwr+(1<<16),mo_acq_rel) )
+ if ( m_rdwr.compare_exchange(rdwr,rdwr+(1<<16),mo_acq_rel) )
break;
}
break;
}
@@
-43,7
+46,7
@@
public:
bo.yield();
}
bo.yield();
}
-
nonatomic<t_element>
* p = & ( m_array[ rd % t_size ] );
+
t_element
* p = & ( m_array[ rd % t_size ] );
return p;
}
return p;
}
@@
-54,7
+57,7
@@
public:
//-----------------------------------------------------
//-----------------------------------------------------
-
nonatomic<t_element>
* write_prepare() {
+
t_element
* write_prepare() {
unsigned int rdwr = m_rdwr.load(mo_acquire);
unsigned int rd,wr;
for(;;) {
unsigned int rdwr = m_rdwr.load(mo_acquire);
unsigned int rd,wr;
for(;;) {
@@
-64,7
+67,7
@@
public:
if ( wr == ((rd + t_size)&0xFFFF) ) // full
return NULL;
if ( wr == ((rd + t_size)&0xFFFF) ) // full
return NULL;
- if ( m_rdwr.compare_exchange
_weak
(rdwr,(rd<<16) | ((wr+1)&0xFFFF),mo_acq_rel) )
+ if ( m_rdwr.compare_exchange(rdwr,(rd<<16) | ((wr+1)&0xFFFF),mo_acq_rel) )
break;
}
break;
}
@@
-74,7
+77,7
@@
public:
bo.yield();
}
bo.yield();
}
-
nonatomic<t_element>
* p = & ( m_array[ wr % t_size ] );
+
t_element
* p = & ( m_array[ wr % t_size ] );
return p;
}
return p;
}