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_QUEUE_TYPES_H
32 #define CDSSTRESS_QUEUE_TYPES_H
34 #include <cds/container/msqueue.h>
35 #include <cds/container/moir_queue.h>
36 #include <cds/container/rwqueue.h>
37 #include <cds/container/optimistic_queue.h>
38 #include <cds/container/vyukov_mpmc_cycle_queue.h>
39 #include <cds/container/basket_queue.h>
40 #include <cds/container/fcqueue.h>
41 #include <cds/container/fcdeque.h>
42 #include <cds/container/segmented_queue.h>
44 #include <cds/gc/hp.h>
45 #include <cds/gc/dhp.h>
47 #include "std_queue.h"
48 #include "lock/win32_lock.h"
49 #include "framework/michael_alloc.h"
51 #include <boost/container/deque.hpp>
53 #include <cds_test/stress_test.h>
54 #include <cds_test/stat_flat_combining_out.h>
55 #include <cds_test/fc_hevy_value.h>
57 #include "print_stat.h"
62 template <typename T, typename Traits=cds::container::fcdeque::traits, class Deque=std::deque<T> >
63 class FCDequeL: public cds::container::FCDeque<T, Deque, Traits >
65 typedef cds::container::FCDeque<T, Deque, Traits > base_class;
71 unsigned int nCompactFactor ///< Flat combining: publication list compacting factor
72 ,unsigned int nCombinePassCount ///< Flat combining: number of combining passes for combiner thread
74 : base_class( nCompactFactor, nCombinePassCount )
77 bool push( T const& v )
79 return base_class::push_front( v );
81 bool enqueue( T const& v )
88 return base_class::pop_back( v );
96 template <typename T, typename Traits=cds::container::fcdeque::traits, class Deque = std::deque<T> >
97 class FCDequeR: public cds::container::FCDeque<T, Deque, Traits >
99 typedef cds::container::FCDeque<T, Deque, Traits > base_class;
105 unsigned int nCompactFactor ///< Flat combining: publication list compacting factor
106 ,unsigned int nCombinePassCount ///< Flat combining: number of combining passes for combiner thread
108 : base_class( nCompactFactor, nCombinePassCount )
111 bool push( T const& v )
113 return base_class::push_back( v );
115 bool enqueue( T const& v )
122 return base_class::pop_front( v );
130 } // namespace details
132 namespace fc_details{
134 struct traits_FCDeque_stat:
135 public cds::container::fcdeque::make_traits<
136 cds::opt::stat< cds::container::fcdeque::stat<> >
139 struct traits_FCDeque_elimination:
140 public cds::container::fcdeque::make_traits<
141 cds::opt::enable_elimination< true >
144 struct traits_FCDeque_elimination_stat:
145 public cds::container::fcdeque::make_traits<
146 cds::opt::stat< cds::container::fcdeque::stat<> >,
147 cds::opt::enable_elimination< true >
150 struct traits_FCDeque_mutex:
151 public cds::container::fcdeque::make_traits<
152 cds::opt::lock_type< std::mutex >
156 struct traits_FCDeque_wait_ss: cds::container::fcdeque::traits
158 typedef cds::algo::flat_combining::wait_strategy::single_mutex_single_condvar<> wait_strategy;
160 struct traits_FCDeque_wait_ss_stat: traits_FCDeque_wait_ss
162 typedef cds::container::fcdeque::stat<> stat;
164 struct traits_FCDeque_wait_sm: cds::container::fcdeque::traits
166 typedef cds::algo::flat_combining::wait_strategy::single_mutex_multi_condvar<> wait_strategy;
168 struct traits_FCDeque_wait_sm_stat: traits_FCDeque_wait_sm
170 typedef cds::container::fcdeque::stat<> stat;
172 struct traits_FCDeque_wait_mm: cds::container::fcdeque::traits
174 typedef cds::algo::flat_combining::wait_strategy::multi_mutex_multi_condvar<> wait_strategy;
176 struct traits_FCDeque_wait_mm_stat: traits_FCDeque_wait_mm
178 typedef cds::container::fcdeque::stat<> stat;
182 template <typename Value>
186 typedef cds::container::MSQueue<cds::gc::HP, Value > MSQueue_HP;
187 typedef cds::container::MSQueue<cds::gc::DHP, Value > MSQueue_DHP;
188 typedef cds::container::MoirQueue<cds::gc::HP, Value > MoirQueue_HP;
189 typedef cds::container::MoirQueue<cds::gc::DHP, Value > MoirQueue_DHP;
191 struct traits_MSQueue_michaelAlloc : public cds::container::msqueue::traits
193 typedef memory::MichaelAllocator<int> allocator;
195 typedef cds::container::MSQueue<cds::gc::HP, Value, traits_MSQueue_michaelAlloc > MSQueue_HP_michaelAlloc;
196 typedef cds::container::MSQueue<cds::gc::DHP, Value, traits_MSQueue_michaelAlloc > MSQueue_DHP_michaelAlloc;
197 typedef cds::container::MoirQueue<cds::gc::HP, Value, traits_MSQueue_michaelAlloc > MoirQueue_HP_michaelAlloc;
198 typedef cds::container::MoirQueue<cds::gc::DHP, Value, traits_MSQueue_michaelAlloc > MoirQueue_DHP_michaelAlloc;
200 struct traits_MSQueue_seqcst : public
201 cds::container::msqueue::make_traits <
202 cds::opt::memory_model < cds::opt::v::sequential_consistent >
205 typedef cds::container::MSQueue< cds::gc::HP, Value, traits_MSQueue_seqcst > MSQueue_HP_seqcst;
206 typedef cds::container::MSQueue< cds::gc::DHP, Value, traits_MSQueue_seqcst > MSQueue_DHP_seqcst;
207 typedef cds::container::MoirQueue< cds::gc::HP, Value, traits_MSQueue_seqcst > MoirQueue_HP_seqcst;
208 typedef cds::container::MoirQueue< cds::gc::DHP, Value, traits_MSQueue_seqcst > MoirQueue_DHP_seqcst;
210 // MSQueue + item counter
211 struct traits_MSQueue_ic : public
212 cds::container::msqueue::make_traits <
213 cds::opt::item_counter < cds::atomicity::item_counter >
216 typedef cds::container::MSQueue< cds::gc::HP, Value, traits_MSQueue_ic > MSQueue_HP_ic;
217 typedef cds::container::MSQueue< cds::gc::DHP, Value, traits_MSQueue_ic > MSQueue_DHP_ic;
218 typedef cds::container::MoirQueue< cds::gc::HP, Value, traits_MSQueue_ic > MoirQueue_HP_ic;
219 typedef cds::container::MoirQueue< cds::gc::DHP, Value, traits_MSQueue_ic > MoirQueue_DHP_ic;
222 struct traits_MSQueue_stat: public
223 cds::container::msqueue::make_traits <
224 cds::opt::stat< cds::container::msqueue::stat<> >
227 typedef cds::container::MSQueue< cds::gc::HP, Value, traits_MSQueue_stat > MSQueue_HP_stat;
228 typedef cds::container::MSQueue< cds::gc::DHP, Value, traits_MSQueue_stat > MSQueue_DHP_stat;
229 typedef cds::container::MoirQueue< cds::gc::HP, Value, traits_MSQueue_stat > MoirQueue_HP_stat;
230 typedef cds::container::MoirQueue< cds::gc::DHP, Value, traits_MSQueue_stat > MoirQueue_DHP_stat;
234 typedef cds::container::OptimisticQueue< cds::gc::HP, Value > OptimisticQueue_HP;
235 typedef cds::container::OptimisticQueue< cds::gc::DHP, Value > OptimisticQueue_DHP;
237 struct traits_OptimisticQueue_michaelAlloc : public cds::container::optimistic_queue::traits
239 typedef memory::MichaelAllocator<int> allocator;
241 typedef cds::container::OptimisticQueue< cds::gc::HP, Value, traits_OptimisticQueue_michaelAlloc > OptimisticQueue_HP_michaelAlloc;
242 typedef cds::container::OptimisticQueue< cds::gc::DHP, Value, traits_OptimisticQueue_michaelAlloc > OptimisticQueue_DHP_michaelAlloc;
244 struct traits_OptimisticQueue_seqcst : public cds::container::optimistic_queue::traits
246 typedef cds::opt::v::sequential_consistent memory_model;
248 typedef cds::container::OptimisticQueue< cds::gc::HP, Value, traits_OptimisticQueue_seqcst > OptimisticQueue_HP_seqcst;
249 typedef cds::container::OptimisticQueue< cds::gc::DHP, Value, traits_OptimisticQueue_seqcst > OptimisticQueue_DHP_seqcst;
251 struct traits_OptimisticQueue_ic : public cds::container::optimistic_queue::traits
253 typedef cds::atomicity::item_counter item_counter;
255 typedef cds::container::OptimisticQueue< cds::gc::HP, Value, traits_OptimisticQueue_ic > OptimisticQueue_HP_ic;
256 typedef cds::container::OptimisticQueue< cds::gc::DHP, Value, traits_OptimisticQueue_ic > OptimisticQueue_DHP_ic;
258 struct traits_OptimisticQueue_stat : public
259 cds::container::optimistic_queue::make_traits <
260 cds::opt::stat < cds::intrusive::optimistic_queue::stat<> >
263 typedef cds::container::OptimisticQueue< cds::gc::HP, Value, traits_OptimisticQueue_stat > OptimisticQueue_HP_stat;
264 typedef cds::container::OptimisticQueue< cds::gc::DHP, Value, traits_OptimisticQueue_stat > OptimisticQueue_DHP_stat;
267 // VyukovMPMCCycleQueue
268 struct traits_VyukovMPMCCycleQueue_dyn : public cds::container::vyukov_queue::traits
270 typedef cds::opt::v::uninitialized_dynamic_buffer< int > buffer;
272 class VyukovMPMCCycleQueue_dyn
273 : public cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPMCCycleQueue_dyn >
275 typedef cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPMCCycleQueue_dyn > base_class;
277 VyukovMPMCCycleQueue_dyn()
278 : base_class( 1024 * 64 )
280 VyukovMPMCCycleQueue_dyn( size_t nCapacity )
281 : base_class( nCapacity )
284 cds::opt::none statistics() const
286 return cds::opt::none();
290 struct traits_VyukovMPMCCycleQueue_dyn_michaelAlloc : public cds::container::vyukov_queue::traits
292 typedef cds::opt::v::uninitialized_dynamic_buffer< int, memory::MichaelAllocator<int> > buffer;
294 class VyukovMPMCCycleQueue_dyn_michaelAlloc
295 : public cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPMCCycleQueue_dyn_michaelAlloc >
297 typedef cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPMCCycleQueue_dyn_michaelAlloc > base_class;
299 VyukovMPMCCycleQueue_dyn_michaelAlloc()
300 : base_class( 1024 * 64 )
302 VyukovMPMCCycleQueue_dyn_michaelAlloc( size_t nCapacity )
303 : base_class( nCapacity )
306 cds::opt::none statistics() const
308 return cds::opt::none();
312 struct traits_VyukovMPMCCycleQueue_dyn_ic : public traits_VyukovMPMCCycleQueue_dyn
314 typedef cds::atomicity::item_counter item_counter;
316 class VyukovMPMCCycleQueue_dyn_ic
317 : public cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPMCCycleQueue_dyn_ic >
319 typedef cds::container::VyukovMPMCCycleQueue< Value, traits_VyukovMPMCCycleQueue_dyn_ic > base_class;
321 VyukovMPMCCycleQueue_dyn_ic()
322 : base_class( 1024 * 64 )
324 VyukovMPMCCycleQueue_dyn_ic( size_t nCapacity )
325 : base_class( nCapacity )
328 cds::opt::none statistics() const
330 return cds::opt::none();
337 typedef cds::container::BasketQueue< cds::gc::HP , Value > BasketQueue_HP;
338 typedef cds::container::BasketQueue< cds::gc::DHP, Value > BasketQueue_DHP;
340 struct traits_BasketQueue_michaelAlloc : public cds::container::basket_queue::traits
342 typedef memory::MichaelAllocator<int> allocator;
344 typedef cds::container::BasketQueue< cds::gc::HP, Value, traits_BasketQueue_michaelAlloc > BasketQueue_HP_michaelAlloc;
345 typedef cds::container::BasketQueue< cds::gc::DHP, Value, traits_BasketQueue_michaelAlloc > BasketQueue_DHP_michaelAlloc;
347 struct traits_BasketQueue_seqcst : public cds::container::basket_queue::traits
349 typedef cds::opt::v::sequential_consistent mamory_model;
351 typedef cds::container::BasketQueue< cds::gc::HP, Value, traits_BasketQueue_seqcst > BasketQueue_HP_seqcst;
352 typedef cds::container::BasketQueue< cds::gc::DHP, Value, traits_BasketQueue_seqcst > BasketQueue_DHP_seqcst;
354 struct traits_BasketQueue_ic : public cds::container::basket_queue::traits
356 typedef cds::atomicity::item_counter item_counter;
358 typedef cds::container::BasketQueue< cds::gc::HP, Value, traits_BasketQueue_ic >BasketQueue_HP_ic;
359 typedef cds::container::BasketQueue< cds::gc::DHP, Value, traits_BasketQueue_ic >BasketQueue_DHP_ic;
361 struct traits_BasketQueue_stat : public cds::container::basket_queue::traits
363 typedef cds::container::basket_queue::stat<> stat;
365 typedef cds::container::BasketQueue< cds::gc::HP, Value, traits_BasketQueue_stat > BasketQueue_HP_stat;
366 typedef cds::container::BasketQueue< cds::gc::DHP, Value, traits_BasketQueue_stat > BasketQueue_DHP_stat;
370 typedef cds::container::RWQueue< Value > RWQueue_Spin;
372 struct traits_RWQueue_Spin_ic : public cds::container::rwqueue::traits
374 typedef cds::atomicity::item_counter item_counter;
376 typedef cds::container::RWQueue< Value, traits_RWQueue_Spin_ic > RWQueue_Spin_ic;
378 struct traits_RWQueue_mutex : public
379 cds::container::rwqueue::make_traits<
380 cds::opt::lock_type< std::mutex >
383 typedef cds::container::RWQueue< Value, traits_RWQueue_mutex > RWQueue_mutex;
386 struct traits_FCQueue_stat:
387 public cds::container::fcqueue::make_traits<
388 cds::opt::stat< cds::container::fcqueue::stat<> >
391 struct traits_FCQueue_single_mutex_single_condvar:
392 public cds::container::fcqueue::make_traits<
393 cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::single_mutex_single_condvar<>>
396 struct traits_FCQueue_single_mutex_single_condvar_stat: traits_FCQueue_single_mutex_single_condvar
398 typedef cds::container::fcqueue::stat<> stat;
400 struct traits_FCQueue_single_mutex_multi_condvar:
401 public cds::container::fcqueue::make_traits<
402 cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::single_mutex_multi_condvar<>>
405 struct traits_FCQueue_single_mutex_multi_condvar_stat: traits_FCQueue_single_mutex_multi_condvar
407 typedef cds::container::fcqueue::stat<> stat;
409 struct traits_FCQueue_multi_mutex_multi_condvar:
410 public cds::container::fcqueue::make_traits<
411 cds::opt::wait_strategy< cds::algo::flat_combining::wait_strategy::multi_mutex_multi_condvar<>>
414 struct traits_FCQueue_multi_mutex_multi_condvar_stat: traits_FCQueue_multi_mutex_multi_condvar
416 typedef cds::container::fcqueue::stat<> stat;
418 struct traits_FCQueue_elimination:
419 public cds::container::fcqueue::make_traits<
420 cds::opt::enable_elimination< true >
423 struct traits_FCQueue_elimination_stat:
424 public cds::container::fcqueue::make_traits<
425 cds::opt::enable_elimination< true >
426 ,cds::opt::stat< cds::container::fcqueue::stat<> >
430 typedef cds::container::FCQueue< Value > FCQueue_deque;
431 typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_stat > FCQueue_deque_stat;
432 typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_single_mutex_single_condvar> FCQueue_deque_wait_ss;
433 typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_single_mutex_single_condvar_stat> FCQueue_deque_wait_ss_stat;
434 typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_single_mutex_multi_condvar> FCQueue_deque_wait_sm;
435 typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_single_mutex_multi_condvar_stat> FCQueue_deque_wait_sm_stat;
436 typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_multi_mutex_multi_condvar> FCQueue_deque_wait_mm;
437 typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_multi_mutex_multi_condvar_stat> FCQueue_deque_wait_mm_stat;
439 typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_elimination > FCQueue_deque_elimination;
440 typedef cds::container::FCQueue< Value, std::queue<Value>, traits_FCQueue_elimination_stat > FCQueue_deque_elimination_stat;
442 typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value>>> FCQueue_list;
443 typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value>>, traits_FCQueue_stat> FCQueue_list_stat;
444 typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value>>, traits_FCQueue_single_mutex_single_condvar> FCQueue_list_wait_ss;
445 typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value>>, traits_FCQueue_single_mutex_single_condvar_stat> FCQueue_list_wait_ss_stat;
446 typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value>>, traits_FCQueue_single_mutex_multi_condvar> FCQueue_list_wait_sm;
447 typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value>>, traits_FCQueue_single_mutex_multi_condvar_stat> FCQueue_list_wait_sm_stat;
448 typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value>>, traits_FCQueue_multi_mutex_multi_condvar> FCQueue_list_wait_mm;
449 typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value>>, traits_FCQueue_multi_mutex_multi_condvar_stat> FCQueue_list_wait_mm_stat;
451 typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value> >, traits_FCQueue_elimination > FCQueue_list_elimination;
452 typedef cds::container::FCQueue< Value, std::queue<Value, std::list<Value> >, traits_FCQueue_elimination_stat > FCQueue_list_elimination_stat;
456 typedef details::FCDequeL< Value > FCDequeL_default;
457 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_mutex > FCDequeL_mutex;
458 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_stat > FCDequeL_stat;
459 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_ss > FCDequeL_wait_ss;
460 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_ss_stat > FCDequeL_wait_ss_stat;
461 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_sm > FCDequeL_wait_sm;
462 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_sm_stat > FCDequeL_wait_sm_stat;
463 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_mm > FCDequeL_wait_mm;
464 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_mm_stat > FCDequeL_wait_mm_stat;
465 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination > FCDequeL_elimination;
466 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination_stat > FCDequeL_elimination_stat;
468 typedef details::FCDequeL< Value, cds::container::fcdeque::traits, boost::container::deque<Value> > FCDequeL_boost;
469 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_stat, boost::container::deque<Value> > FCDequeL_boost_stat;
470 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination, boost::container::deque<Value> > FCDequeL_boost_elimination;
471 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination_stat, boost::container::deque<Value> > FCDequeL_boost_elimination_stat;
473 typedef details::FCDequeR< Value > FCDequeR_default;
474 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_mutex > FCDequeR_mutex;
475 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_stat > FCDequeR_stat;
476 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_ss > FCDequeR_wait_ss;
477 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_ss_stat > FCDequeR_wait_ss_stat;
478 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_sm > FCDequeR_wait_sm;
479 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_sm_stat > FCDequeR_wait_sm_stat;
480 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_mm > FCDequeR_wait_mm;
481 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_mm_stat > FCDequeR_wait_mm_stat;
482 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination > FCDequeR_elimination;
483 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination_stat > FCDequeR_elimination_stat;
485 typedef details::FCDequeR< Value, cds::container::fcdeque::traits, boost::container::deque<Value> > FCDequeR_boost;
486 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_stat, boost::container::deque<Value> > FCDequeR_boost_stat;
487 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination, boost::container::deque<Value> > FCDequeR_boost_elimination;
488 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination_stat, boost::container::deque<Value> > FCDequeR_boost_elimination_stat;
491 typedef StdQueue_deque<Value> StdQueue_deque_Spinlock;
492 typedef StdQueue_list<Value> StdQueue_list_Spinlock;
493 typedef StdQueue_deque<Value, std::mutex> StdQueue_deque_Mutex;
494 typedef StdQueue_list<Value, std::mutex> StdQueue_list_Mutex;
495 #ifdef UNIT_LOCK_WIN_CS
496 typedef StdQueue_deque<Value, lock::win::CS> StdQueue_deque_WinCS;
497 typedef StdQueue_list<Value, lock::win::CS> StdQueue_list_WinCS;
498 typedef StdQueue_deque<Value, lock::win::Mutex> StdQueue_deque_WinMutex;
499 typedef StdQueue_list<Value, lock::win::Mutex> StdQueue_list_WinMutex;
503 class traits_SegmentedQueue_spin_stat:
504 public cds::container::segmented_queue::make_traits<
505 cds::opt::stat< cds::intrusive::segmented_queue::stat<> >
508 class traits_SegmentedQueue_spin_padding:
509 public cds::container::segmented_queue::make_traits<
510 cds::opt::padding< cds::opt::cache_line_padding >
513 class traits_SegmentedQueue_mutex_stat:
514 public cds::container::segmented_queue::make_traits<
515 cds::opt::stat< cds::intrusive::segmented_queue::stat<> >
516 ,cds::opt::lock_type< std::mutex >
519 class traits_SegmentedQueue_mutex:
520 public cds::container::segmented_queue::make_traits<
521 cds::opt::lock_type< std::mutex >
524 class traits_SegmentedQueue_mutex_padding:
525 public cds::container::segmented_queue::make_traits<
526 cds::opt::lock_type< std::mutex >
527 , cds::opt::padding< cds::opt::cache_line_padding >
531 typedef cds::container::SegmentedQueue< cds::gc::HP, Value > SegmentedQueue_HP_spin;
532 typedef cds::container::SegmentedQueue< cds::gc::HP, Value, traits_SegmentedQueue_spin_padding > SegmentedQueue_HP_spin_padding;
533 typedef cds::container::SegmentedQueue< cds::gc::HP, Value, traits_SegmentedQueue_spin_stat > SegmentedQueue_HP_spin_stat;
534 typedef cds::container::SegmentedQueue< cds::gc::HP, Value, traits_SegmentedQueue_mutex > SegmentedQueue_HP_mutex;
535 typedef cds::container::SegmentedQueue< cds::gc::HP, Value, traits_SegmentedQueue_mutex_padding > SegmentedQueue_HP_mutex_padding;
536 typedef cds::container::SegmentedQueue< cds::gc::HP, Value, traits_SegmentedQueue_mutex_stat > SegmentedQueue_HP_mutex_stat;
538 typedef cds::container::SegmentedQueue< cds::gc::DHP, Value > SegmentedQueue_DHP_spin;
539 typedef cds::container::SegmentedQueue< cds::gc::DHP, Value, traits_SegmentedQueue_spin_padding > SegmentedQueue_DHP_spin_padding;
540 typedef cds::container::SegmentedQueue< cds::gc::DHP, Value, traits_SegmentedQueue_spin_stat > SegmentedQueue_DHP_spin_stat;
541 typedef cds::container::SegmentedQueue< cds::gc::DHP, Value, traits_SegmentedQueue_mutex > SegmentedQueue_DHP_mutex;
542 typedef cds::container::SegmentedQueue< cds::gc::DHP, Value, traits_SegmentedQueue_mutex_padding > SegmentedQueue_DHP_mutex_padding;
543 typedef cds::container::SegmentedQueue< cds::gc::DHP, Value, traits_SegmentedQueue_mutex_stat > SegmentedQueue_DHP_mutex_stat;
546 template <typename Value>
547 struct TypesFCHeavyValue {
548 typedef details::FCDequeL< Value > FCDequeL_HeavyValue_default;
549 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_mutex > FCDequeL_HeavyValue_mutex;
550 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_stat > FCDequeL_HeavyValue_stat;
551 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_ss > FCDequeL_HeavyValue_wait_ss;
552 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_ss_stat > FCDequeL_HeavyValue_wait_ss_stat;
553 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_sm > FCDequeL_HeavyValue_wait_sm;
554 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_sm_stat > FCDequeL_HeavyValue_wait_sm_stat;
555 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_mm > FCDequeL_HeavyValue_wait_mm;
556 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_wait_mm_stat > FCDequeL_HeavyValue_wait_mm_stat;
557 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination > FCDequeL_HeavyValue_elimination;
558 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination_stat > FCDequeL_HeavyValue_elimination_stat;
560 typedef details::FCDequeL< Value, cds::container::fcdeque::traits, boost::container::deque<Value> > FCDequeL_HeavyValue_boost;
561 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_stat, boost::container::deque<Value> > FCDequeL_HeavyValue_boost_stat;
562 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination, boost::container::deque<Value> > FCDequeL_HeavyValue_boost_elimination;
563 typedef details::FCDequeL< Value, fc_details::traits_FCDeque_elimination_stat, boost::container::deque<Value> > FCDequeL_HeavyValue_boost_elimination_stat;
565 typedef details::FCDequeR< Value > FCDequeR_HeavyValue_default;
566 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_mutex > FCDequeR_HeavyValue_mutex;
567 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_stat > FCDequeR_HeavyValue_stat;
568 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_ss > FCDequeR_HeavyValue_wait_ss;
569 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_ss_stat > FCDequeR_HeavyValue_wait_ss_stat;
570 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_sm > FCDequeR_HeavyValue_wait_sm;
571 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_sm_stat > FCDequeR_HeavyValue_wait_sm_stat;
572 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_mm > FCDequeR_HeavyValue_wait_mm;
573 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_wait_mm_stat > FCDequeR_HeavyValue_wait_mm_stat;
574 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination > FCDequeR_HeavyValue_elimination;
575 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination_stat > FCDequeR_HeavyValue_elimination_stat;
577 typedef details::FCDequeR< Value, cds::container::fcdeque::traits, boost::container::deque<Value> > FCDequeR_HeavyValue_boost;
578 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_stat, boost::container::deque<Value> > FCDequeR_HeavyValue_boost_stat;
579 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination, boost::container::deque<Value> > FCDequeR_HeavyValue_boost_elimination;
580 typedef details::FCDequeR< Value, fc_details::traits_FCDeque_elimination_stat, boost::container::deque<Value> > FCDequeR_HeavyValue_boost_elimination_stat;
585 // *********************************************
589 template <typename Counter>
590 static inline property_stream& operator <<( property_stream& o, cds::container::fcqueue::stat<Counter> const& s )
593 << CDSSTRESS_STAT_OUT( s, m_nEnqueue )
594 << CDSSTRESS_STAT_OUT( s, m_nEnqMove )
595 << CDSSTRESS_STAT_OUT( s, m_nDequeue )
596 << CDSSTRESS_STAT_OUT( s, m_nFailedDeq )
597 << CDSSTRESS_STAT_OUT( s, m_nCollided )
598 << static_cast<cds::algo::flat_combining::stat<> const&>(s);
601 static inline property_stream& operator <<( property_stream& o, cds::container::fcqueue::empty_stat const& /*s*/ )
606 static inline property_stream& operator <<( property_stream& o, cds::container::fcdeque::empty_stat const& /*s*/ )
611 static inline property_stream& operator <<( property_stream& o, cds::container::fcdeque::stat<> const& s )
614 << CDSSTRESS_STAT_OUT( s, m_nPushFront )
615 << CDSSTRESS_STAT_OUT( s, m_nPushFrontMove )
616 << CDSSTRESS_STAT_OUT( s, m_nPushBack )
617 << CDSSTRESS_STAT_OUT( s, m_nPushBackMove )
618 << CDSSTRESS_STAT_OUT( s, m_nPopFront )
619 << CDSSTRESS_STAT_OUT( s, m_nFailedPopFront )
620 << CDSSTRESS_STAT_OUT( s, m_nPopBack )
621 << CDSSTRESS_STAT_OUT( s, m_nFailedPopBack )
622 << CDSSTRESS_STAT_OUT( s, m_nCollided )
623 << static_cast<cds::algo::flat_combining::stat<> const&>(s);
626 } // namespace cds_test
628 #define CDSSTRESS_Queue_F( test_fixture, type_name, level ) \
629 TEST_F( test_fixture, type_name ) \
631 if ( !check_detail_level( level )) return; \
632 typedef queue::Types< value_type >::type_name queue_type; \
637 #define CDSSTRESS_FCQueue_F( test_fixture, type_name, level ) \
638 TEST_F( test_fixture, type_name ) \
640 if ( !check_detail_level( level )) return; \
641 typedef queue::TypesFCHeavyValue< value_type >::type_name queue_type; \
646 #define CDSSTRESS_MSQueue( test_fixture ) \
647 CDSSTRESS_Queue_F( test_fixture, MSQueue_HP, 0 ) \
648 CDSSTRESS_Queue_F( test_fixture, MSQueue_HP_michaelAlloc, 0 ) \
649 CDSSTRESS_Queue_F( test_fixture, MSQueue_HP_seqcst, 2 ) \
650 CDSSTRESS_Queue_F( test_fixture, MSQueue_HP_ic, 1 ) \
651 CDSSTRESS_Queue_F( test_fixture, MSQueue_HP_stat, 0 ) \
652 CDSSTRESS_Queue_F( test_fixture, MSQueue_DHP, 0 ) \
653 CDSSTRESS_Queue_F( test_fixture, MSQueue_DHP_michaelAlloc, 0 ) \
654 CDSSTRESS_Queue_F( test_fixture, MSQueue_DHP_seqcst, 2 ) \
655 CDSSTRESS_Queue_F( test_fixture, MSQueue_DHP_ic, 1 ) \
656 CDSSTRESS_Queue_F( test_fixture, MSQueue_DHP_stat, 0 )
658 #define CDSSTRESS_MoirQueue( test_fixture ) \
659 CDSSTRESS_Queue_F( test_fixture, MoirQueue_HP, 0 ) \
660 CDSSTRESS_Queue_F( test_fixture, MoirQueue_HP_michaelAlloc, 0 ) \
661 CDSSTRESS_Queue_F( test_fixture, MoirQueue_HP_seqcst, 2 ) \
662 CDSSTRESS_Queue_F( test_fixture, MoirQueue_HP_ic, 1 ) \
663 CDSSTRESS_Queue_F( test_fixture, MoirQueue_HP_stat, 0 ) \
664 CDSSTRESS_Queue_F( test_fixture, MoirQueue_DHP, 0 ) \
665 CDSSTRESS_Queue_F( test_fixture, MoirQueue_DHP_michaelAlloc,0 ) \
666 CDSSTRESS_Queue_F( test_fixture, MoirQueue_DHP_seqcst, 2 ) \
667 CDSSTRESS_Queue_F( test_fixture, MoirQueue_DHP_ic, 1 ) \
668 CDSSTRESS_Queue_F( test_fixture, MoirQueue_DHP_stat, 0 )
670 #define CDSSTRESS_OptimsticQueue( test_fixture ) \
671 CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_HP, 0 ) \
672 CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_HP_michaelAlloc, 0 ) \
673 CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_HP_seqcst, 2 ) \
674 CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_HP_ic, 1 ) \
675 CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_HP_stat, 0 ) \
676 CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_DHP, 0 ) \
677 CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_DHP_michaelAlloc, 0 ) \
678 CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_DHP_seqcst, 2 ) \
679 CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_DHP_ic, 1 ) \
680 CDSSTRESS_Queue_F( test_fixture, OptimisticQueue_DHP_stat, 0 )
682 #define CDSSTRESS_BasketQueue( test_fixture ) \
683 CDSSTRESS_Queue_F( test_fixture, BasketQueue_HP, 0 ) \
684 CDSSTRESS_Queue_F( test_fixture, BasketQueue_HP_michaelAlloc, 0 ) \
685 CDSSTRESS_Queue_F( test_fixture, BasketQueue_HP_seqcst, 2 ) \
686 CDSSTRESS_Queue_F( test_fixture, BasketQueue_HP_ic, 1 ) \
687 CDSSTRESS_Queue_F( test_fixture, BasketQueue_HP_stat, 0 ) \
688 CDSSTRESS_Queue_F( test_fixture, BasketQueue_DHP, 0 ) \
689 CDSSTRESS_Queue_F( test_fixture, BasketQueue_DHP_michaelAlloc, 0 ) \
690 CDSSTRESS_Queue_F( test_fixture, BasketQueue_DHP_seqcst, 2 ) \
691 CDSSTRESS_Queue_F( test_fixture, BasketQueue_DHP_ic, 1 ) \
692 CDSSTRESS_Queue_F( test_fixture, BasketQueue_DHP_stat, 0 )
694 #define CDSSTRESS_FCQueue( test_fixture ) \
695 CDSSTRESS_Queue_F( test_fixture, FCQueue_deque, 0 ) \
696 CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_stat, 0 ) \
697 CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_wait_ss, 1 ) \
698 CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_wait_ss_stat, 0 ) \
699 CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_wait_sm, 1 ) \
700 CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_wait_sm_stat, 0 ) \
701 CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_wait_mm, 1 ) \
702 CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_wait_mm_stat, 0 ) \
703 CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_elimination, 1 ) \
704 CDSSTRESS_Queue_F( test_fixture, FCQueue_deque_elimination_stat,0 ) \
705 CDSSTRESS_Queue_F( test_fixture, FCQueue_list, 0 ) \
706 CDSSTRESS_Queue_F( test_fixture, FCQueue_list_stat, 0 ) \
707 CDSSTRESS_Queue_F( test_fixture, FCQueue_list_wait_ss, 1 ) \
708 CDSSTRESS_Queue_F( test_fixture, FCQueue_list_wait_ss_stat, 0 ) \
709 CDSSTRESS_Queue_F( test_fixture, FCQueue_list_wait_sm, 1 ) \
710 CDSSTRESS_Queue_F( test_fixture, FCQueue_list_wait_sm_stat, 0 ) \
711 CDSSTRESS_Queue_F( test_fixture, FCQueue_list_wait_mm, 1 ) \
712 CDSSTRESS_Queue_F( test_fixture, FCQueue_list_wait_mm_stat, 0 ) \
713 CDSSTRESS_Queue_F( test_fixture, FCQueue_list_elimination, 1 ) \
714 CDSSTRESS_Queue_F( test_fixture, FCQueue_list_elimination_stat, 0 )
716 #define CDSSTRESS_FCDeque( test_fixture ) \
717 CDSSTRESS_Queue_F( test_fixture, FCDequeL_default, 0 ) \
718 CDSSTRESS_Queue_F( test_fixture, FCDequeL_mutex, 0 ) \
719 CDSSTRESS_Queue_F( test_fixture, FCDequeL_stat, 0 ) \
720 CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_ss, 1 ) \
721 CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_ss_stat, 0 ) \
722 CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_sm, 1 ) \
723 CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_sm_stat, 0 ) \
724 CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_mm, 1 ) \
725 CDSSTRESS_Queue_F( test_fixture, FCDequeL_wait_mm_stat, 0 ) \
726 CDSSTRESS_Queue_F( test_fixture, FCDequeL_elimination, 1 ) \
727 CDSSTRESS_Queue_F( test_fixture, FCDequeL_elimination_stat, 0 ) \
728 CDSSTRESS_Queue_F( test_fixture, FCDequeL_boost, 1 ) \
729 CDSSTRESS_Queue_F( test_fixture, FCDequeL_boost_stat, 0 ) \
730 CDSSTRESS_Queue_F( test_fixture, FCDequeL_boost_elimination, 1 ) \
731 CDSSTRESS_Queue_F( test_fixture, FCDequeL_boost_elimination_stat, 1 ) \
732 CDSSTRESS_Queue_F( test_fixture, FCDequeR_default, 0 ) \
733 CDSSTRESS_Queue_F( test_fixture, FCDequeR_mutex, 0 ) \
734 CDSSTRESS_Queue_F( test_fixture, FCDequeR_stat, 0 ) \
735 CDSSTRESS_Queue_F( test_fixture, FCDequeR_wait_ss, 1 ) \
736 CDSSTRESS_Queue_F( test_fixture, FCDequeR_wait_ss_stat, 0 ) \
737 CDSSTRESS_Queue_F( test_fixture, FCDequeR_wait_sm, 1 ) \
738 CDSSTRESS_Queue_F( test_fixture, FCDequeR_wait_sm_stat, 0 ) \
739 CDSSTRESS_Queue_F( test_fixture, FCDequeR_wait_mm, 1 ) \
740 CDSSTRESS_Queue_F( test_fixture, FCDequeR_wait_mm_stat, 0 ) \
741 CDSSTRESS_Queue_F( test_fixture, FCDequeR_elimination, 1 ) \
742 CDSSTRESS_Queue_F( test_fixture, FCDequeR_elimination_stat, 0 ) \
743 CDSSTRESS_Queue_F( test_fixture, FCDequeR_boost, 1 ) \
744 CDSSTRESS_Queue_F( test_fixture, FCDequeR_boost_stat, 0 ) \
745 CDSSTRESS_Queue_F( test_fixture, FCDequeR_boost_elimination, 1 ) \
746 CDSSTRESS_Queue_F( test_fixture, FCDequeR_boost_elimination_stat, 1 )
748 #define CDSSTRESS_FCDeque_HeavyValue( test_fixture ) \
749 CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_default, 1 ) \
750 CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_mutex, 1 ) \
751 CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_stat, 1 ) \
752 CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_wait_ss, 1 ) \
753 CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_wait_ss_stat, 1 ) \
754 CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_wait_sm, 1 ) \
755 CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_wait_sm_stat, 1 ) \
756 CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_wait_mm, 1 ) \
757 CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_wait_mm_stat, 1 ) \
758 CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_elimination, 1 ) \
759 CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_elimination_stat, 1 ) \
760 CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_boost, 1 ) \
761 CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_boost_stat, 1 ) \
762 CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_boost_elimination, 1 ) \
763 CDSSTRESS_FCQueue_F( test_fixture, FCDequeL_HeavyValue_boost_elimination_stat, 1 ) \
764 CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_default, 1 ) \
765 CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_mutex, 1 ) \
766 CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_stat, 1 ) \
767 CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_wait_ss, 1 ) \
768 CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_wait_ss_stat, 1 ) \
769 CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_wait_sm, 1 ) \
770 CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_wait_sm_stat, 1 ) \
771 CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_wait_mm, 1 ) \
772 CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_wait_mm_stat, 1 ) \
773 CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_elimination, 1 ) \
774 CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_elimination_stat, 1 ) \
775 CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_boost, 1 ) \
776 CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_boost_stat, 1 ) \
777 CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_boost_elimination, 1 ) \
778 CDSSTRESS_FCQueue_F( test_fixture, FCDequeR_HeavyValue_boost_elimination_stat, 1 )
780 #define CDSSTRESS_RWQueue( test_fixture ) \
781 CDSSTRESS_Queue_F( test_fixture, RWQueue_Spin, 0 ) \
782 CDSSTRESS_Queue_F( test_fixture, RWQueue_Spin_ic, 1 ) \
783 CDSSTRESS_Queue_F( test_fixture, RWQueue_mutex, 0 )
785 #define CDSSTRESS_SegmentedQueue( test_fixture ) \
786 CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_HP_spin, 0 ) \
787 CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_HP_spin_padding, 0 ) \
788 CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_HP_spin_stat, 0 ) \
789 CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_HP_mutex, 0 ) \
790 CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_HP_mutex_padding, 1 ) \
791 CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_HP_mutex_stat, 0 ) \
792 CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_DHP_spin, 0 ) \
793 CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_DHP_spin_padding, 1 ) \
794 CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_DHP_spin_stat, 0 ) \
795 CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_DHP_mutex, 0 ) \
796 CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_DHP_mutex_padding, 1 ) \
797 CDSSTRESS_Queue_F( test_fixture, SegmentedQueue_DHP_mutex_stat, 0 )
800 #define CDSSTRESS_VyukovQueue( test_fixture ) \
801 CDSSTRESS_Queue_F( test_fixture, VyukovMPMCCycleQueue_dyn, 0 ) \
802 CDSSTRESS_Queue_F( test_fixture, VyukovMPMCCycleQueue_dyn_michaelAlloc, 0 ) \
803 CDSSTRESS_Queue_F( test_fixture, VyukovMPMCCycleQueue_dyn_ic, 1 )
805 #define CDSSTRESS_StdQueue( test_fixture ) \
806 CDSSTRESS_Queue_F( test_fixture, StdQueue_deque_Spinlock, 0 ) \
807 CDSSTRESS_Queue_F( test_fixture, StdQueue_list_Spinlock, 0 ) \
808 CDSSTRESS_Queue_F( test_fixture, StdQueue_deque_Mutex, 1 ) \
809 CDSSTRESS_Queue_F( test_fixture, StdQueue_list_Mutex, 1 )
811 #endif // #ifndef CDSSTRESS_QUEUE_TYPES_H