X-Git-Url: http://plrg.eecs.uci.edu/git/?p=libcds.git;a=blobdiff_plain;f=test%2Fstress%2Fqueue%2Fintrusive_queue_type.h;h=8077d536614b94cbdbece498c032b06e2ae2bdac;hp=fd380311abb2e7a6c0be5c1aca014a4aff0ea115;hb=HEAD;hpb=93d44064e86e7ff2435a1ce4de9e7354a263519f diff --git a/test/stress/queue/intrusive_queue_type.h b/test/stress/queue/intrusive_queue_type.h index fd380311..8077d536 100644 --- a/test/stress/queue/intrusive_queue_type.h +++ b/test/stress/queue/intrusive_queue_type.h @@ -1,11 +1,11 @@ /* 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/ - + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -25,7 +25,7 @@ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef CDSSTRESS_INTRUSIVE_QUEUE_TYPES_H @@ -34,7 +34,6 @@ #include #include #include -#include #include #include #include @@ -46,6 +45,7 @@ #include #include +#include #include "print_stat.h" namespace queue { @@ -81,7 +81,7 @@ namespace queue { value_type * pop() { lock_guard l( m_Lock ); - if ( m_List.empty() ) + if ( m_List.empty()) return nullptr; value_type& v = m_List.front(); m_List.pop_front(); @@ -112,7 +112,7 @@ namespace queue { } // namespace details template - struct Types + struct Types { // MSQueue, MoirQueue struct traits_MSQueue_HP : public cds::intrusive::msqueue::traits @@ -243,62 +243,6 @@ namespace queue { {}; typedef cds::intrusive::OptimisticQueue< cds::gc::DHP, T, traits_OptimisticQueue_DHP_stat > OptimisticQueue_DHP_stat; - // TsigasCycleQueue - class TsigasCycleQueue_dyn - : public cds::intrusive::TsigasCycleQueue< T, - typename cds::intrusive::tsigas_queue::make_traits< - cds::opt::buffer< cds::opt::v::initialized_dynamic_buffer< int > > - >::type - > - { - typedef cds::intrusive::TsigasCycleQueue< T, - typename cds::intrusive::tsigas_queue::make_traits< - cds::opt::buffer< cds::opt::v::initialized_dynamic_buffer< int > > - >::type - > base_class; - public: - TsigasCycleQueue_dyn() - : base_class( 1024 * 64 ) - {} - - TsigasCycleQueue_dyn( size_t nCapacity ) - : base_class( nCapacity ) - {} - - cds::opt::none statistics() const - { - return cds::opt::none(); - } - }; - - class TsigasCycleQueue_dyn_ic - : public cds::intrusive::TsigasCycleQueue< T, - typename cds::intrusive::tsigas_queue::make_traits< - cds::opt::buffer< cds::opt::v::initialized_dynamic_buffer< int > > - ,cds::opt::item_counter< cds::atomicity::item_counter > - >::type - > - { - typedef cds::intrusive::TsigasCycleQueue< T, - typename cds::intrusive::tsigas_queue::make_traits< - cds::opt::buffer< cds::opt::v::initialized_dynamic_buffer< int > > - ,cds::opt::item_counter< cds::atomicity::item_counter > - >::type - > base_class; - public: - TsigasCycleQueue_dyn_ic() - : base_class( 1024 * 64 ) - {} - TsigasCycleQueue_dyn_ic( size_t nCapacity ) - : base_class( nCapacity ) - {} - - cds::opt::none statistics() const - { - return cds::opt::none(); - } - }; - // VyukovMPMCCycleQueue struct traits_VyukovMPMCCycleQueue_dyn : public cds::intrusive::vyukov_queue::traits { @@ -412,18 +356,18 @@ namespace queue { // FCQueue class traits_FCQueue_delay2: public cds::intrusive::fcqueue::make_traits< - cds::opt::back_off< cds::backoff::delay_of<2> > + cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::backoff< cds::backoff::delay_of<2>>> >::type {}; class traits_FCQueue_delay2_elimination: public cds::intrusive::fcqueue::make_traits< - cds::opt::back_off< cds::backoff::delay_of<2> > + cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::backoff< cds::backoff::delay_of<2>>> ,cds::opt::enable_elimination< true > >::type {}; class traits_FCQueue_delay2_elimination_stat: public cds::intrusive::fcqueue::make_traits< - cds::opt::back_off< cds::backoff::delay_of<2> > + cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::backoff< cds::backoff::delay_of<2>>> ,cds::opt::stat< cds::intrusive::fcqueue::stat<> > ,cds::opt::enable_elimination< true > >::type @@ -442,11 +386,45 @@ namespace queue { >::type {}; + class traits_FCQueue_wait_ss: + public cds::intrusive::fcqueue::make_traits< + cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::single_mutex_single_condvar<>> + >::type + {}; + struct traits_FCQueue_wait_ss_stat: traits_FCQueue_wait_ss + { + typedef cds::intrusive::fcqueue::stat<> stat; + }; + class traits_FCQueue_wait_sm: + public cds::intrusive::fcqueue::make_traits< + cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::single_mutex_multi_condvar<>> + >::type + {}; + struct traits_FCQueue_wait_sm_stat: traits_FCQueue_wait_sm + { + typedef cds::intrusive::fcqueue::stat<> stat; + }; + class traits_FCQueue_wait_mm: + public cds::intrusive::fcqueue::make_traits< + cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::multi_mutex_multi_condvar<>> + >::type + {}; + struct traits_FCQueue_wait_mm_stat: traits_FCQueue_wait_mm + { + typedef cds::intrusive::fcqueue::stat<> stat; + }; + typedef cds::intrusive::FCQueue< T, boost::intrusive::list, traits_FCQueue_delay2 > FCQueue_list_delay2; typedef cds::intrusive::FCQueue< T, boost::intrusive::list, traits_FCQueue_delay2_elimination > FCQueue_list_delay2_elimination; typedef cds::intrusive::FCQueue< T, boost::intrusive::list, traits_FCQueue_delay2_elimination_stat > FCQueue_list_delay2_elimination_stat; typedef cds::intrusive::FCQueue< T, boost::intrusive::list, traits_FCQueue_expbackoff_elimination > FCQueue_list_expbackoff_elimination; typedef cds::intrusive::FCQueue< T, boost::intrusive::list, traits_FCQueue_expbackoff_elimination_stat > FCQueue_list_expbackoff_elimination_stat; + typedef cds::intrusive::FCQueue< T, boost::intrusive::list, traits_FCQueue_wait_ss > FCQueue_list_wait_ss; + typedef cds::intrusive::FCQueue< T, boost::intrusive::list, traits_FCQueue_wait_ss_stat > FCQueue_list_wait_ss_stat; + typedef cds::intrusive::FCQueue< T, boost::intrusive::list, traits_FCQueue_wait_sm > FCQueue_list_wait_sm; + typedef cds::intrusive::FCQueue< T, boost::intrusive::list, traits_FCQueue_wait_sm_stat > FCQueue_list_wait_sm_stat; + typedef cds::intrusive::FCQueue< T, boost::intrusive::list, traits_FCQueue_wait_mm > FCQueue_list_wait_mm; + typedef cds::intrusive::FCQueue< T, boost::intrusive::list, traits_FCQueue_wait_mm_stat > FCQueue_list_wait_mm_stat; // SegmentedQueue class traits_SegmentedQueue_spin_stat: @@ -508,16 +486,7 @@ namespace cds_test { << CDSSTRESS_STAT_OUT( s, m_nDequeue ) << CDSSTRESS_STAT_OUT( s, m_nFailedDeq ) << CDSSTRESS_STAT_OUT( s, m_nCollided ) - << CDSSTRESS_STAT_OUT_( "combining_factor", s.combining_factor() ) - << CDSSTRESS_STAT_OUT( s, m_nOperationCount ) - << CDSSTRESS_STAT_OUT( s, m_nCombiningCount ) - << CDSSTRESS_STAT_OUT( s, m_nCompactPublicationList ) - << CDSSTRESS_STAT_OUT( s, m_nDeactivatePubRecord ) - << CDSSTRESS_STAT_OUT( s, m_nActivatePubRecord ) - << CDSSTRESS_STAT_OUT( s, m_nPubRecordCreated ) - << CDSSTRESS_STAT_OUT( s, m_nPubRecordDeteted ) - << CDSSTRESS_STAT_OUT( s, m_nAcquirePubRecCount ) - << CDSSTRESS_STAT_OUT( s, m_nReleasePubRecCount ); + << static_cast const&>(s); } static inline property_stream& operator <<( property_stream& o, cds::intrusive::fcqueue::empty_stat const& /*s*/ )