From: khizmax Date: Sat, 18 Jun 2016 14:56:37 +0000 (+0300) Subject: Increased combining phase X-Git-Tag: v2.2.0~209 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=0e1478183dcdfbd2b81a8e3bb41e54c23d72d7e5;p=libcds.git Increased combining phase --- diff --git a/cds/algo/flat_combining/kernel.h b/cds/algo/flat_combining/kernel.h index 79bf5e7b..06d4f60c 100644 --- a/cds/algo/flat_combining/kernel.h +++ b/cds/algo/flat_combining/kernel.h @@ -602,7 +602,7 @@ namespace cds { namespace algo { { assert( pRec->nState.load( memory_model::memory_order_relaxed ) == inactive ); - pRec->nAge.store( m_nCount.load(memory_model::memory_order_acquire), memory_model::memory_order_release ); + pRec->nAge.store( m_nCount.load(memory_model::memory_order_relaxed), memory_model::memory_order_release ); pRec->nState.store( active, memory_model::memory_order_release ); // Insert record to publication list @@ -689,11 +689,14 @@ namespace cds { namespace algo { // The thread is a combiner assert( !m_Mutex.try_lock() ); - unsigned int const nCurAge = m_nCount.fetch_add( 1, memory_model::memory_order_release ) + 1; + unsigned int const nCurAge = m_nCount.fetch_add( 1, memory_model::memory_order_relaxed ) + 1; - for ( unsigned int nPass = 0; nPass < m_nCombinePassCount; ++nPass ) + unsigned int nEmptyPass = 0; + for ( unsigned int nPass = 0; nPass < m_nCombinePassCount; ++nPass ) { if ( !combining_pass( owner, nCurAge )) - break; + if ( ++nEmptyPass > 2 ) + break; + } m_Stat.onCombining(); if ( (nCurAge & m_nCompactFactor) == 0 ) @@ -740,7 +743,7 @@ namespace cds { namespace algo { // The thread is a combiner assert( !m_Mutex.try_lock() ); - unsigned int const nCurAge = m_nCount.fetch_add( 1, memory_model::memory_order_release ) + 1; + unsigned int const nCurAge = m_nCount.fetch_add( 1, memory_model::memory_order_relaxed ) + 1; for ( unsigned int nPass = 0; nPass < m_nCombinePassCount; ++nPass ) owner.fc_process( begin(), end() );