From: khizmax Date: Wed, 24 May 2017 17:58:03 +0000 (+0300) Subject: Fixed memory ordering X-Git-Tag: v2.3.0~19 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=d6b1e5d936534986ea49267d1b3d2714d7b10f4d;p=libcds.git Fixed memory ordering --- diff --git a/cds/sync/pool_monitor.h b/cds/sync/pool_monitor.h index 1b73b404..622cd7f8 100644 --- a/cds/sync/pool_monitor.h +++ b/cds/sync/pool_monitor.h @@ -107,7 +107,7 @@ namespace cds { namespace sync { Template arguments: - \p LockPool - the @ref cds_memory_pool "pool type". The pool must maintain the objects of type \p std::mutex or similar. The access to the pool is not synchronized. - - \p BackOff - back-off strategy for spinning, default is \p cds::backoff::yield + - \p BackOff - back-off strategy for spinning, default is \p cds::backoff::Default - \p Stat - enable (\p true) or disable (\p false, the default) monitor's internal statistics. How to use @@ -116,7 +116,7 @@ namespace cds { namespace sync { typedef cds::sync::pool_monitor< pool_type > sync_monitor; \endcode */ - template + template class pool_monitor { public: @@ -195,7 +195,7 @@ namespace cds { namespace sync { // try lock spin and increment reference counter refspin_type cur = p.m_SyncMonitorInjection.m_RefSpin.load( atomics::memory_order_relaxed ) & ~c_nSpinBit; if ( !p.m_SyncMonitorInjection.m_RefSpin.compare_exchange_weak( cur, cur + c_nRefIncrement + c_nSpinBit, - atomics::memory_order_acquire, atomics::memory_order_relaxed )) + atomics::memory_order_acquire, atomics::memory_order_acquire )) { back_off bkoff; do { @@ -203,7 +203,7 @@ namespace cds { namespace sync { bkoff(); cur &= ~c_nSpinBit; } while ( !p.m_SyncMonitorInjection.m_RefSpin.compare_exchange_weak( cur, cur + c_nRefIncrement + c_nSpinBit, - atomics::memory_order_acquire, atomics::memory_order_relaxed )); + atomics::memory_order_acquire, atomics::memory_order_acquire )); } // spin locked @@ -237,7 +237,7 @@ namespace cds { namespace sync { // try lock spin refspin_type cur = p.m_SyncMonitorInjection.m_RefSpin.load( atomics::memory_order_relaxed ) & ~c_nSpinBit; if ( !p.m_SyncMonitorInjection.m_RefSpin.compare_exchange_weak( cur, cur | c_nSpinBit, - atomics::memory_order_acquire, atomics::memory_order_relaxed )) + atomics::memory_order_acquire, atomics::memory_order_acquire )) { back_off bkoff; do { @@ -245,7 +245,7 @@ namespace cds { namespace sync { bkoff(); cur &= ~c_nSpinBit; } while ( !p.m_SyncMonitorInjection.m_RefSpin.compare_exchange_weak( cur, cur | c_nSpinBit, - atomics::memory_order_acquire, atomics::memory_order_relaxed )); + atomics::memory_order_acquire, atomics::memory_order_acquire )); } // spin locked now