/*
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/
*/
#include "stack_type.h"
+#include "../misc/common.h"
namespace {
virtual void test()
{
- memset( m_arrPush, 0, sizeof( m_arrPush ) );
+ memset( m_arrPush, 0, sizeof( m_arrPush ));
value_type v;
v.nThread = id();
for ( size_t i = 0; i < m_nItemCount; ++i ) {
v.nNo = i % c_nValArraySize;
- if ( m_stack.push( v ) )
+ if ( m_stack.push( v ))
++m_arrPush[v.nNo];
else
++m_nPushError;
virtual void test()
{
- memset( m_arrPop, 0, sizeof( m_arrPop ) );
+ memset( m_arrPop, 0, sizeof( m_arrPop ));
value_type v;
- while ( !( s_nWorkingProducers.load( atomics::memory_order_acquire ) == 0 && m_stack.empty()) ) {
- if ( m_stack.pop( v ) ) {
+ while ( !( s_nWorkingProducers.load( atomics::memory_order_acquire ) == 0 && m_stack.empty())) {
+ if ( m_stack.pop( v )) {
++m_nPopCount;
- if ( v.nNo < sizeof( m_arrPop ) / sizeof( m_arrPop[0] ) )
+ if ( v.nNo < sizeof( m_arrPop ) / sizeof( m_arrPop[0] ))
++m_arrPop[v.nNo];
else
++m_nDirtyPop;
propout() << std::make_pair( "producer_thread_count", s_nPushThreadCount )
<< std::make_pair( "consumer_thread_count", s_nPopThreadCount )
<< std::make_pair( "push_count", s_nStackSize )
- ;
+;
std::chrono::milliseconds duration = pool.run();
propout() << std::make_pair( "duration", duration );
- analyze( stack );
+ DEBUG(analyze( stack ));
propout() << stack.statistics();
}
void test_elimination( Stack& stack )
{
test( stack );
- check_elimination_stat( stack.statistics() );
+ check_elimination_stat( stack.statistics());
}
void check_elimination_stat( cds::container::treiber_stack::empty_stat const& )
{
EXPECT_EQ( s.m_PushCount.get() + s.m_ActivePushCollision.get() + s.m_PassivePushCollision.get(), s_nStackSize );
EXPECT_EQ( s.m_PopCount.get() + s.m_ActivePopCollision.get() + s.m_PassivePopCollision.get(), s_nStackSize );
- EXPECT_EQ( s.m_PushCount.get(), s.m_PopCount.get() );
- EXPECT_EQ( s.m_ActivePopCollision.get(), s.m_PassivePushCollision.get() );
- EXPECT_EQ( s.m_ActivePushCollision.get(), s.m_PassivePopCollision.get() );
+ EXPECT_EQ( s.m_PushCount.get(), s.m_PopCount.get());
+ EXPECT_EQ( s.m_ActivePopCollision.get(), s.m_PassivePushCollision.get());
+ EXPECT_EQ( s.m_ActivePushCollision.get(), s.m_PassivePopCollision.get());
}
template< class Stack>
size_t nPopEmpty = 0;
size_t nPopCount = 0;
size_t arrVal[c_nValArraySize];
- memset( arrVal, 0, sizeof( arrVal ) );
+ memset( arrVal, 0, sizeof( arrVal ));
size_t nDirtyPop = 0;
for ( size_t threadNo = 0; threadNo < pool.size(); ++threadNo ) {
<< std::make_pair( "push_error", nPushError )
<< std::make_pair( "pop_empty", nPopEmpty )
<< std::make_pair( "dirty_pop", nDirtyPop )
- ;
+;
}
};
CDSSTRESS_TreiberStack( stack_push_pop )
CDSSTRESS_EliminationStack( stack_push_pop )
- CDSSTRESS_FCStack( stack_push_pop )
- CDSSTRESS_FCDeque( stack_push_pop )
- CDSSTRESS_StdStack( stack_push_pop )
+ //CDSSTRESS_FCStack( stack_push_pop )
+ //CDSSTRESS_FCDeque( stack_push_pop )
} // namespace