2 This file is a part of libcds - Concurrent Data Structures library
4 (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
6 Source code repo: http://github.com/khizmax/libcds/
7 Download: http://sourceforge.net/projects/libcds/files/
9 Redistribution and use in source and binary forms, with or without
10 modification, are permitted provided that the following conditions are met:
12 * Redistributions of source code must retain the above copyright notice, this
13 list of conditions and the following disclaimer.
15 * Redistributions in binary form must reproduce the above copyright notice,
16 this list of conditions and the following disclaimer in the documentation
17 and/or other materials provided with the distribution.
19 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
23 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25 SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 #ifndef CDSSTRESS_INTRUSIVE_QUEUE_TYPES_H
32 #define CDSSTRESS_INTRUSIVE_QUEUE_TYPES_H
34 #include <cds/intrusive/msqueue.h>
35 #include <cds/intrusive/moir_queue.h>
36 #include <cds/intrusive/optimistic_queue.h>
37 #include <cds/intrusive/tsigas_cycle_queue.h>
38 #include <cds/intrusive/vyukov_mpmc_cycle_queue.h>
39 #include <cds/intrusive/basket_queue.h>
40 #include <cds/intrusive/fcqueue.h>
41 #include <cds/intrusive/segmented_queue.h>
43 #include <cds/gc/hp.h>
44 #include <cds/gc/dhp.h>
46 #include <boost/intrusive/slist.hpp>
48 #include <cds_test/stress_test.h>
49 #include <cds_test/stat_flat_combining_out.h>
50 #include "print_stat.h"
57 template <typename T, typename Lock=std::mutex>
60 typedef boost::intrusive::slist< T, boost::intrusive::cache_last<true> > slist_type;
61 typedef Lock lock_type;
62 typedef std::lock_guard<lock_type> lock_guard;
65 mutable lock_type m_Lock;
70 bool push( value_type& v )
72 lock_guard l( m_Lock );
73 m_List.push_back( v );
77 bool enqueue( value_type& v )
84 lock_guard l( m_Lock );
87 value_type& v = m_List.front();
98 lock_guard l( m_Lock );
99 return m_List.empty();
104 lock_guard l( m_Lock );
105 return m_List.size();
108 empty_stat statistics() const
113 } // namespace details
115 template <typename T>
118 // MSQueue, MoirQueue
119 struct traits_MSQueue_HP : public cds::intrusive::msqueue::traits
121 typedef cds::intrusive::msqueue::base_hook< cds::opt::gc< cds::gc::HP > > hook;
123 typedef cds::intrusive::MSQueue< cds::gc::HP, T, traits_MSQueue_HP > MSQueue_HP;
124 typedef cds::intrusive::MoirQueue< cds::gc::HP, T, traits_MSQueue_HP > MoirQueue_HP;
126 struct traits_MSQueue_HP_seqcst : public cds::intrusive::msqueue::traits
128 typedef cds::intrusive::msqueue::base_hook< cds::opt::gc< cds::gc::HP > > hook;
129 typedef cds::opt::v::sequential_consistent memory_model;
131 typedef cds::intrusive::MSQueue< cds::gc::HP, T, traits_MSQueue_HP_seqcst > MSQueue_HP_seqcst;
132 typedef cds::intrusive::MoirQueue< cds::gc::HP, T, traits_MSQueue_HP_seqcst > MoirQueue_HP_seqcst;
134 struct traits_MSQueue_DHP : public cds::intrusive::msqueue::traits
136 typedef cds::intrusive::msqueue::base_hook< cds::opt::gc< cds::gc::DHP > > hook;
138 typedef cds::intrusive::MSQueue< cds::gc::DHP, T, traits_MSQueue_DHP > MSQueue_DHP;
139 typedef cds::intrusive::MoirQueue< cds::gc::DHP, T, traits_MSQueue_DHP > MoirQueue_DHP;
141 struct traits_MSQueue_DHP_seqcst : public cds::intrusive::msqueue::traits
143 typedef cds::intrusive::msqueue::base_hook< cds::opt::gc< cds::gc::DHP > > hook;
144 typedef cds::opt::v::sequential_consistent memory_model;
146 typedef cds::intrusive::MSQueue< cds::gc::DHP, T, traits_MSQueue_DHP_seqcst > MSQueue_DHP_seqcst;
147 typedef cds::intrusive::MoirQueue< cds::gc::DHP, T, traits_MSQueue_DHP_seqcst > MoirQueue_DHP_seqcst;
149 // MSQueue + item counter
150 struct traits_MSQueue_HP_ic : public cds::intrusive::msqueue::traits
152 typedef cds::intrusive::msqueue::base_hook< cds::opt::gc< cds::gc::HP > > hook;
153 typedef cds::atomicity::item_counter item_counter;
155 typedef cds::intrusive::MSQueue< cds::gc::HP, T, traits_MSQueue_HP_ic > MSQueue_HP_ic;
156 typedef cds::intrusive::MoirQueue< cds::gc::HP, T, traits_MSQueue_HP_ic > MoirQueue_HP_ic;
158 struct traits_MSQueue_DHP_ic : public cds::intrusive::msqueue::traits
160 typedef cds::intrusive::msqueue::base_hook< cds::opt::gc< cds::gc::DHP > > hook;
161 typedef cds::atomicity::item_counter item_counter;
163 typedef cds::intrusive::MSQueue< cds::gc::DHP, T, traits_MSQueue_DHP_ic > MSQueue_DHP_ic;
164 typedef cds::intrusive::MoirQueue< cds::gc::DHP, T, traits_MSQueue_DHP_ic > MoirQueue_DHP_ic;
167 struct traits_MSQueue_HP_stat : public cds::intrusive::msqueue::traits
169 typedef cds::intrusive::msqueue::base_hook< cds::opt::gc< cds::gc::HP > > hook;
170 typedef cds::intrusive::msqueue::stat<> stat;
172 typedef cds::intrusive::MSQueue< cds::gc::HP, T, traits_MSQueue_HP_stat > MSQueue_HP_stat;
173 typedef cds::intrusive::MoirQueue< cds::gc::HP, T, traits_MSQueue_HP_stat > MoirQueue_HP_stat;
175 struct traits_MSQueue_DHP_stat : public cds::intrusive::msqueue::traits
177 typedef cds::intrusive::msqueue::base_hook< cds::opt::gc< cds::gc::DHP > > hook;
178 typedef cds::intrusive::msqueue::stat<> stat;
180 typedef cds::intrusive::MSQueue< cds::gc::DHP, T, traits_MSQueue_DHP_stat > MSQueue_DHP_stat;
181 typedef cds::intrusive::MoirQueue< cds::gc::DHP, T, traits_MSQueue_DHP_stat > MoirQueue_DHP_stat;
185 struct traits_OptimisticQueue_HP : public cds::intrusive::optimistic_queue::traits
187 typedef cds::intrusive::optimistic_queue::base_hook< cds::opt::gc< cds::gc::HP > > hook;
189 typedef cds::intrusive::OptimisticQueue< cds::gc::HP, T, traits_OptimisticQueue_HP > OptimisticQueue_HP;
191 struct traits_OptimisticQueue_HP_seqcst : public
192 cds::intrusive::optimistic_queue::make_traits <
193 cds::intrusive::opt::hook< cds::intrusive::optimistic_queue::base_hook< cds::opt::gc< cds::gc::HP > > >
194 , cds::opt::memory_model< cds::opt::v::sequential_consistent >
197 typedef cds::intrusive::OptimisticQueue< cds::gc::HP, T, traits_OptimisticQueue_HP_seqcst > OptimisticQueue_HP_seqcst;
199 struct traits_OptimisticQueue_DHP : public cds::intrusive::optimistic_queue::traits
201 typedef cds::intrusive::optimistic_queue::base_hook< cds::opt::gc< cds::gc::DHP > > hook;
203 typedef cds::intrusive::OptimisticQueue< cds::gc::DHP, T, traits_OptimisticQueue_DHP > OptimisticQueue_DHP;
205 struct traits_OptimisticQueue_DHP_seqcst: public
206 cds::intrusive::optimistic_queue::make_traits <
207 cds::intrusive::opt::hook< cds::intrusive::optimistic_queue::base_hook< cds::opt::gc< cds::gc::DHP > > >
208 , cds::opt::memory_model< cds::opt::v::sequential_consistent >
211 typedef cds::intrusive::OptimisticQueue< cds::gc::DHP, T, traits_OptimisticQueue_DHP_seqcst > OptimisticQueue_DHP_seqcst;
213 // OptimisticQueue + item counter
214 struct traits_OptimisticQueue_HP_ic: public
215 cds::intrusive::optimistic_queue::make_traits <
216 cds::intrusive::opt::hook< cds::intrusive::optimistic_queue::base_hook< cds::opt::gc< cds::gc::HP > > >
217 , cds::opt::item_counter< cds::atomicity::item_counter >
220 typedef cds::intrusive::OptimisticQueue< cds::gc::HP, T, traits_OptimisticQueue_HP_ic > OptimisticQueue_HP_ic;
222 struct traits_OptimisticQueue_DHP_ic: public
223 cds::intrusive::optimistic_queue::make_traits <
224 cds::intrusive::opt::hook< cds::intrusive::optimistic_queue::base_hook< cds::opt::gc< cds::gc::DHP > > >
225 , cds::opt::item_counter< cds::atomicity::item_counter >
228 typedef cds::intrusive::OptimisticQueue< cds::gc::DHP, T, traits_OptimisticQueue_DHP_ic > OptimisticQueue_DHP_ic;
230 // OptimisticQueue + stat
231 struct traits_OptimisticQueue_HP_stat: public
232 cds::intrusive::optimistic_queue::make_traits <
233 cds::intrusive::opt::hook< cds::intrusive::optimistic_queue::base_hook< cds::opt::gc< cds::gc::HP > > >
234 , cds::opt::stat< cds::intrusive::optimistic_queue::stat<> >
237 typedef cds::intrusive::OptimisticQueue< cds::gc::HP, T, traits_OptimisticQueue_HP_stat > OptimisticQueue_HP_stat;
239 struct traits_OptimisticQueue_DHP_stat: public
240 cds::intrusive::optimistic_queue::make_traits <
241 cds::intrusive::opt::hook< cds::intrusive::optimistic_queue::base_hook< cds::opt::gc< cds::gc::DHP > > >
242 , cds::opt::stat< cds::intrusive::optimistic_queue::stat<> >
245 typedef cds::intrusive::OptimisticQueue< cds::gc::DHP, T, traits_OptimisticQueue_DHP_stat > OptimisticQueue_DHP_stat;
248 class TsigasCycleQueue_dyn
249 : public cds::intrusive::TsigasCycleQueue< T,
250 typename cds::intrusive::tsigas_queue::make_traits<
251 cds::opt::buffer< cds::opt::v::initialized_dynamic_buffer< int > >
255 typedef cds::intrusive::TsigasCycleQueue< T,
256 typename cds::intrusive::tsigas_queue::make_traits<
257 cds::opt::buffer< cds::opt::v::initialized_dynamic_buffer< int > >
261 TsigasCycleQueue_dyn()
262 : base_class( 1024 * 64 )
265 TsigasCycleQueue_dyn( size_t nCapacity )
266 : base_class( nCapacity )
269 cds::opt::none statistics() const
271 return cds::opt::none();
275 class TsigasCycleQueue_dyn_ic
276 : public cds::intrusive::TsigasCycleQueue< T,
277 typename cds::intrusive::tsigas_queue::make_traits<
278 cds::opt::buffer< cds::opt::v::initialized_dynamic_buffer< int > >
279 ,cds::opt::item_counter< cds::atomicity::item_counter >
283 typedef cds::intrusive::TsigasCycleQueue< T,
284 typename cds::intrusive::tsigas_queue::make_traits<
285 cds::opt::buffer< cds::opt::v::initialized_dynamic_buffer< int > >
286 ,cds::opt::item_counter< cds::atomicity::item_counter >
290 TsigasCycleQueue_dyn_ic()
291 : base_class( 1024 * 64 )
293 TsigasCycleQueue_dyn_ic( size_t nCapacity )
294 : base_class( nCapacity )
297 cds::opt::none statistics() const
299 return cds::opt::none();
303 // VyukovMPMCCycleQueue
304 struct traits_VyukovMPMCCycleQueue_dyn : public cds::intrusive::vyukov_queue::traits
306 typedef cds::opt::v::uninitialized_dynamic_buffer< int > buffer;
308 class VyukovMPMCCycleQueue_dyn
309 : public cds::intrusive::VyukovMPMCCycleQueue< T, traits_VyukovMPMCCycleQueue_dyn >
311 typedef cds::intrusive::VyukovMPMCCycleQueue< T, traits_VyukovMPMCCycleQueue_dyn > base_class;
313 VyukovMPMCCycleQueue_dyn()
314 : base_class( 1024 * 64 )
316 VyukovMPMCCycleQueue_dyn( size_t nCapacity )
317 : base_class( nCapacity )
320 cds::opt::none statistics() const
322 return cds::opt::none();
326 struct traits_VyukovMPMCCycleQueue_dyn_ic : public traits_VyukovMPMCCycleQueue_dyn
328 typedef cds::atomicity::item_counter item_counter;
330 class VyukovMPMCCycleQueue_dyn_ic
331 : public cds::intrusive::VyukovMPMCCycleQueue< T, traits_VyukovMPMCCycleQueue_dyn_ic >
333 typedef cds::intrusive::VyukovMPMCCycleQueue< T, traits_VyukovMPMCCycleQueue_dyn_ic > base_class;
335 VyukovMPMCCycleQueue_dyn_ic()
336 : base_class( 1024 * 64 )
338 VyukovMPMCCycleQueue_dyn_ic( size_t nCapacity )
339 : base_class( nCapacity )
342 cds::opt::none statistics() const
344 return cds::opt::none();
349 struct traits_BasketQueue_HP : public
350 cds::intrusive::basket_queue::make_traits <
351 cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::HP > > >
354 typedef cds::intrusive::BasketQueue< cds::gc::HP, T, traits_BasketQueue_HP > BasketQueue_HP;
356 struct traits_BasketQueue_HP_seqcst: public
357 cds::intrusive::basket_queue::make_traits <
358 cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::HP > > >
359 , cds::opt::memory_model< cds::opt::v::sequential_consistent >
362 typedef cds::intrusive::BasketQueue<cds::gc::HP, T, traits_BasketQueue_HP_seqcst > BasketQueue_HP_seqcst;
364 struct traits_BasketQueue_DHP : public
365 cds::intrusive::basket_queue::make_traits <
366 cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::DHP > > >
369 typedef cds::intrusive::BasketQueue< cds::gc::DHP, T, traits_BasketQueue_DHP > BasketQueue_DHP;
371 struct traits_BasketQueue_DHP_seqcst: public
372 cds::intrusive::basket_queue::make_traits <
373 cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::DHP > > >
374 , cds::opt::memory_model< cds::opt::v::sequential_consistent >
377 typedef cds::intrusive::BasketQueue< cds::gc::DHP, T, traits_BasketQueue_DHP_seqcst > BasketQueue_DHP_seqcst;
379 // BasketQueue + item counter
380 struct traits_BasketQueue_HP_ic : public
381 cds::intrusive::basket_queue::make_traits <
382 cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::HP > > >
383 ,cds::opt::item_counter< cds::atomicity::item_counter >
386 typedef cds::intrusive::BasketQueue< cds::gc::HP, T, traits_BasketQueue_HP_ic > BasketQueue_HP_ic;
388 struct traits_BasketQueue_DHP_ic : public
389 cds::intrusive::basket_queue::make_traits <
390 cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::DHP > > >
391 ,cds::opt::item_counter< cds::atomicity::item_counter >
394 typedef cds::intrusive::BasketQueue< cds::gc::DHP, T, traits_BasketQueue_DHP_ic > BasketQueue_DHP_ic;
396 // BasketQueue + stat
397 struct traits_BasketQueue_HP_stat : public
398 cds::intrusive::basket_queue::make_traits <
399 cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::HP > > >
400 , cds::opt::stat< cds::intrusive::basket_queue::stat<> >
403 typedef cds::intrusive::BasketQueue< cds::gc::HP, T, traits_BasketQueue_HP_stat > BasketQueue_HP_stat;
405 struct traits_BasketQueue_DHP_stat : public
406 cds::intrusive::basket_queue::make_traits <
407 cds::intrusive::opt::hook< cds::intrusive::basket_queue::base_hook< cds::opt::gc< cds::gc::DHP > > >
408 , cds::opt::stat< cds::intrusive::basket_queue::stat<> >
411 typedef cds::intrusive::BasketQueue< cds::gc::DHP, T, traits_BasketQueue_DHP_stat > BasketQueue_DHP_stat;
414 class traits_FCQueue_delay2:
415 public cds::intrusive::fcqueue::make_traits<
416 cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::backoff< cds::backoff::delay_of<2>>>
419 class traits_FCQueue_delay2_elimination:
420 public cds::intrusive::fcqueue::make_traits<
421 cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::backoff< cds::backoff::delay_of<2>>>
422 ,cds::opt::enable_elimination< true >
425 class traits_FCQueue_delay2_elimination_stat:
426 public cds::intrusive::fcqueue::make_traits<
427 cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::backoff< cds::backoff::delay_of<2>>>
428 ,cds::opt::stat< cds::intrusive::fcqueue::stat<> >
429 ,cds::opt::enable_elimination< true >
432 class traits_FCQueue_expbackoff_elimination:
433 public cds::intrusive::fcqueue::make_traits<
434 cds::opt::enable_elimination< true >
435 ,cds::opt::elimination_backoff< cds::backoff::Default >
438 class traits_FCQueue_expbackoff_elimination_stat:
439 public cds::intrusive::fcqueue::make_traits<
440 cds::opt::enable_elimination< true >
441 ,cds::opt::stat< cds::intrusive::fcqueue::stat<> >
442 ,cds::opt::elimination_backoff< cds::backoff::Default >
446 class traits_FCQueue_wait_ss:
447 public cds::intrusive::fcqueue::make_traits<
448 cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::single_mutex_single_condvar<>>
451 struct traits_FCQueue_wait_ss_stat: traits_FCQueue_wait_ss
453 typedef cds::intrusive::fcqueue::stat<> stat;
455 class traits_FCQueue_wait_sm:
456 public cds::intrusive::fcqueue::make_traits<
457 cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::single_mutex_multi_condvar<>>
460 struct traits_FCQueue_wait_sm_stat: traits_FCQueue_wait_sm
462 typedef cds::intrusive::fcqueue::stat<> stat;
464 class traits_FCQueue_wait_mm:
465 public cds::intrusive::fcqueue::make_traits<
466 cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::multi_mutex_multi_condvar<>>
469 struct traits_FCQueue_wait_mm_stat: traits_FCQueue_wait_mm
471 typedef cds::intrusive::fcqueue::stat<> stat;
474 typedef cds::intrusive::FCQueue< T, boost::intrusive::list<T>, traits_FCQueue_delay2 > FCQueue_list_delay2;
475 typedef cds::intrusive::FCQueue< T, boost::intrusive::list<T>, traits_FCQueue_delay2_elimination > FCQueue_list_delay2_elimination;
476 typedef cds::intrusive::FCQueue< T, boost::intrusive::list<T>, traits_FCQueue_delay2_elimination_stat > FCQueue_list_delay2_elimination_stat;
477 typedef cds::intrusive::FCQueue< T, boost::intrusive::list<T>, traits_FCQueue_expbackoff_elimination > FCQueue_list_expbackoff_elimination;
478 typedef cds::intrusive::FCQueue< T, boost::intrusive::list<T>, traits_FCQueue_expbackoff_elimination_stat > FCQueue_list_expbackoff_elimination_stat;
479 typedef cds::intrusive::FCQueue< T, boost::intrusive::list<T>, traits_FCQueue_wait_ss > FCQueue_list_wait_ss;
480 typedef cds::intrusive::FCQueue< T, boost::intrusive::list<T>, traits_FCQueue_wait_ss_stat > FCQueue_list_wait_ss_stat;
481 typedef cds::intrusive::FCQueue< T, boost::intrusive::list<T>, traits_FCQueue_wait_sm > FCQueue_list_wait_sm;
482 typedef cds::intrusive::FCQueue< T, boost::intrusive::list<T>, traits_FCQueue_wait_sm_stat > FCQueue_list_wait_sm_stat;
483 typedef cds::intrusive::FCQueue< T, boost::intrusive::list<T>, traits_FCQueue_wait_mm > FCQueue_list_wait_mm;
484 typedef cds::intrusive::FCQueue< T, boost::intrusive::list<T>, traits_FCQueue_wait_mm_stat > FCQueue_list_wait_mm_stat;
487 class traits_SegmentedQueue_spin_stat:
488 public cds::intrusive::segmented_queue::make_traits<
489 cds::opt::stat< cds::intrusive::segmented_queue::stat<> >
492 class traits_SegmentedQueue_spin_padding :
493 public cds::intrusive::segmented_queue::make_traits<
494 cds::opt::padding< cds::opt::cache_line_padding >
497 class traits_SegmentedQueue_mutex_stat :
498 public cds::intrusive::segmented_queue::make_traits<
499 cds::opt::stat< cds::intrusive::segmented_queue::stat<> >
500 ,cds::opt::lock_type< std::mutex >
503 class traits_SegmentedQueue_mutex:
504 public cds::intrusive::segmented_queue::make_traits<
505 cds::opt::lock_type< std::mutex >
508 class traits_SegmentedQueue_mutex_padding:
509 public cds::intrusive::segmented_queue::make_traits<
510 cds::opt::lock_type< std::mutex >
511 ,cds::opt::padding< cds::opt::cache_line_padding >
515 typedef cds::intrusive::SegmentedQueue< cds::gc::HP, T > SegmentedQueue_HP_spin;
516 typedef cds::intrusive::SegmentedQueue< cds::gc::HP, T, traits_SegmentedQueue_spin_padding > SegmentedQueue_HP_spin_padding;
517 typedef cds::intrusive::SegmentedQueue< cds::gc::HP, T, traits_SegmentedQueue_spin_stat > SegmentedQueue_HP_spin_stat;
518 typedef cds::intrusive::SegmentedQueue< cds::gc::HP, T, traits_SegmentedQueue_mutex > SegmentedQueue_HP_mutex;
519 typedef cds::intrusive::SegmentedQueue< cds::gc::HP, T, traits_SegmentedQueue_mutex_padding > SegmentedQueue_HP_mutex_padding;
520 typedef cds::intrusive::SegmentedQueue< cds::gc::HP, T, traits_SegmentedQueue_mutex_stat > SegmentedQueue_HP_mutex_stat;
522 typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, T > SegmentedQueue_DHP_spin;
523 typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, T, traits_SegmentedQueue_spin_padding > SegmentedQueue_DHP_spin_padding;
524 typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, T, traits_SegmentedQueue_spin_stat > SegmentedQueue_DHP_spin_stat;
525 typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, T, traits_SegmentedQueue_mutex > SegmentedQueue_DHP_mutex;
526 typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, T, traits_SegmentedQueue_mutex_padding > SegmentedQueue_DHP_mutex_padding;
527 typedef cds::intrusive::SegmentedQueue< cds::gc::DHP, T, traits_SegmentedQueue_mutex_stat > SegmentedQueue_DHP_mutex_stat;
530 typedef details::BoostSList< T, std::mutex > BoostSList_mutex;
531 typedef details::BoostSList< T, cds::sync::spin > BoostSList_spin;
537 // cds::container::fcqueue::stat
538 template <typename Counter>
539 static inline property_stream& operator <<( property_stream& o, cds::intrusive::fcqueue::stat<Counter> const& s )
542 << CDSSTRESS_STAT_OUT( s, m_nEnqueue )
543 << CDSSTRESS_STAT_OUT( s, m_nDequeue )
544 << CDSSTRESS_STAT_OUT( s, m_nFailedDeq )
545 << CDSSTRESS_STAT_OUT( s, m_nCollided )
546 << static_cast<cds::algo::flat_combining::stat<> const&>(s);
549 static inline property_stream& operator <<( property_stream& o, cds::intrusive::fcqueue::empty_stat const& /*s*/ )
554 } // namespace cds_test
556 #endif // #ifndef CDSSTRESS_INTRUSIVE_QUEUE_TYPES_H