return m_FlatCombining.statistics();
}
-
public: // flat combining cooperation, not for direct use!
//@cond
/// Flat combining supporting function. Do not call it directly!
{
assert( pRec );
- // this function is called under FC mutex, so switch TSan off
- CDS_TSAN_ANNOTATE_IGNORE_RW_BEGIN;
switch ( pRec->op()) {
case op_push:
assert( pRec->pVal );
assert(false);
break;
}
- CDS_TSAN_ANNOTATE_IGNORE_RW_END;
}
/// Batch-processing flat combining
void fc_process( typename fc_kernel::iterator itBegin, typename fc_kernel::iterator itEnd )
{
- // this function is called under FC mutex, so switch TSan off
- CDS_TSAN_ANNOTATE_IGNORE_RW_BEGIN;
-
typedef typename fc_kernel::iterator fc_iterator;
for ( fc_iterator it = itBegin, itPrev = itEnd; it != itEnd; ++it ) {
- switch ( it->op()) {
+ switch ( it->op( atomics::memory_order_acquire )) {
case op_push:
case op_pop:
if ( itPrev != itEnd && collide( *itPrev, *it ))
break;
}
}
- CDS_TSAN_ANNOTATE_IGNORE_RW_END;
}
//@endcond