From 3f557d137e70ca9da76ce84ec663da53e266e272 Mon Sep 17 00:00:00 2001 From: Brian Norris Date: Wed, 10 Oct 2012 14:22:26 -0700 Subject: [PATCH] mpmc-queue: fixup compilation * Remove "nonatomic" type template * Don't use atomic(T) constructor * Don't use compare_exchange_weak() --- mpmc-queue/mpmc-queue.h | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/mpmc-queue/mpmc-queue.h b/mpmc-queue/mpmc-queue.h index bef0f32..fdfbb36 100644 --- 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 : - nonatomic m_array[t_size]; + t_element m_array[t_size]; // rdwr counts the reads & writes that have started atomic m_rdwr; @@ -17,13 +17,16 @@ private: 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 * read_fetch() { + t_element * read_fetch() { 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 ( 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; } @@ -43,7 +46,7 @@ public: bo.yield(); } - nonatomic * p = & ( m_array[ rd % t_size ] ); + t_element * p = & ( m_array[ rd % t_size ] ); return p; } @@ -54,7 +57,7 @@ public: //----------------------------------------------------- - nonatomic * write_prepare() { + t_element * write_prepare() { 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 ( 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; } @@ -74,7 +77,7 @@ public: bo.yield(); } - nonatomic * p = & ( m_array[ wr % t_size ] ); + t_element * p = & ( m_array[ wr % t_size ] ); return p; } -- 2.34.1