/*
This file is a part of libcds - Concurrent Data Structures library
- (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+ (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2017
Source code repo: http://github.com/khizmax/libcds/
Download: http://sourceforge.net/projects/libcds/files/
template <typename FreeList >
struct value_type: public FreeList::node
{
- size_t counter;
+ atomics::atomic<size_t> counter;
value_type()
- : counter(0)
+ : counter(0)
{}
};
for ( size_t pass = 0; pass < s_nPassCount; ++pass ) {
item_type* p;
while ( (p = static_cast<item_type*>( m_FreeList.get())) == nullptr );
- p->counter++;
+ p->counter.fetch_add( 1, atomics::memory_order_relaxed );
m_FreeList.put( p );
}
}
s_nThreadCount = 1;
if ( s_nPassCount == 0 )
s_nPassCount = 1000;
+
+ // Override the pass count.
+ s_nPassCount = cfg.get_size_t("PutGetSinglePassCount", s_nPassCount);
}
//static void TearDownTestCase();
propout() << std::make_pair( "duration", duration );
// analyze result
- EXPECT_EQ( item.counter, s_nPassCount * s_nThreadCount );
+ EXPECT_EQ( item.counter.load( atomics::memory_order_relaxed ), s_nPassCount * s_nThreadCount );
list.clear( []( typename FreeList::node* ) {} );
}
};
atomics::atomic<tagged_ptr> tp;
- if ( tp.is_lock_free() ) {
+ if ( tp.is_lock_free()) {
cds::intrusive::TaggedFreeList fl;
test( fl );
}