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_STACK_TYPES_H
32 #define CDSSTRESS_INTRUSIVE_STACK_TYPES_H
34 #include <cds/intrusive/treiber_stack.h>
35 #include <cds/intrusive/fcstack.h>
37 #include <cds/gc/hp.h>
38 #include <cds/gc/dhp.h>
41 #include <cds/sync/spinlock.h>
45 #include <boost/intrusive/list.hpp>
47 #include <cds_test/stress_test.h>
48 #include <cds_test/stat_flat_combining_out.h>
55 template < typename T, typename Stack, typename Lock>
60 cds::intrusive::treiber_stack::empty_stat m_stat;
62 typedef std::unique_lock<Lock> unique_lock;
69 unique_lock l( m_Lock );
76 unique_lock l( m_Lock );
77 if ( !m_Impl.empty()) {
87 unique_lock l( m_Lock );
88 return m_Impl.empty();
91 cds::intrusive::treiber_stack::empty_stat const& statistics() const
102 using base_hook = cds::intrusive::treiber_stack::base_hook < cds::opt::gc< GC > >;
105 typedef cds::intrusive::TreiberStack< cds::gc::HP, T > Treiber_HP;
106 struct traits_Treiber_DHP: public
107 cds::intrusive::treiber_stack::make_traits <
108 cds::intrusive::opt::hook< base_hook<cds::gc::DHP> >
111 typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Treiber_DHP >Treiber_DHP;
113 template <class GC> struct traits_Treiber_seqcst : public
114 cds::intrusive::treiber_stack::make_traits <
115 cds::intrusive::opt::hook< base_hook<GC> >
116 , cds::opt::memory_model<cds::opt::v::sequential_consistent>
119 typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Treiber_seqcst<cds::gc::HP> > Treiber_HP_seqcst;
120 typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Treiber_seqcst<cds::gc::DHP> > Treiber_DHP_seqcst;
122 template <class GC> struct traits_Treiber_stat: public
123 cds::intrusive::treiber_stack::make_traits <
124 cds::intrusive::opt::hook< base_hook<GC> >
125 , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
128 typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Treiber_stat<cds::gc::HP> > Treiber_HP_stat;
129 typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Treiber_stat<cds::gc::DHP> > Treiber_DHP_stat;
131 template <class GC> struct traits_Treiber_yield: public
132 cds::intrusive::treiber_stack::make_traits <
133 cds::intrusive::opt::hook< base_hook<GC> >
134 , cds::opt::back_off<cds::backoff::yield>
135 , cds::opt::memory_model<cds::opt::v::relaxed_ordering>
138 typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Treiber_yield<cds::gc::HP> > Treiber_HP_yield;
139 typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Treiber_yield<cds::gc::DHP> > Treiber_DHP_yield;
141 template <class GC> struct traits_Treiber_pause: public
142 cds::intrusive::treiber_stack::make_traits <
143 cds::intrusive::opt::hook< base_hook<GC> >
144 , cds::opt::back_off<cds::backoff::pause>
147 typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Treiber_pause<cds::gc::HP> > Treiber_HP_pause;
148 typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Treiber_pause<cds::gc::DHP> > Treiber_DHP_pause;
150 template <class GC> struct traits_Treiber_exp: public
151 cds::intrusive::treiber_stack::make_traits <
152 cds::intrusive::opt::hook< base_hook<GC> >
154 cds::backoff::exponential<
161 typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Treiber_exp<cds::gc::HP> > Treiber_HP_exp;
162 typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Treiber_exp<cds::gc::DHP> > Treiber_DHP_exp;
166 template <class GC> struct traits_Elimination_on : public
167 cds::intrusive::treiber_stack::make_traits <
168 cds::intrusive::opt::hook< base_hook<GC> >
169 , cds::opt::enable_elimination<true>
172 typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Elimination_on<cds::gc::HP> > Elimination_HP;
173 typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_on<cds::gc::DHP> > Elimination_DHP;
175 template <class GC> struct traits_Elimination_seqcst : public
176 cds::intrusive::treiber_stack::make_traits <
177 cds::intrusive::opt::hook< base_hook<GC> >
178 , cds::opt::enable_elimination<true>
179 , cds::opt::memory_model< cds::opt::v::sequential_consistent >
182 typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Elimination_seqcst<cds::gc::HP> > Elimination_HP_seqcst;
183 typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_seqcst<cds::gc::DHP> > Elimination_DHP_seqcst;
185 template <class GC> struct traits_Elimination_2ms: public
186 cds::intrusive::treiber_stack::make_traits <
187 cds::intrusive::opt::hook< base_hook<GC> >
188 , cds::opt::enable_elimination<true>
189 , cds::opt::elimination_backoff< cds::backoff::delay_of<2> >
192 typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Elimination_2ms<cds::gc::HP> > Elimination_HP_2ms;
193 typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_2ms<cds::gc::DHP> > Elimination_DHP_2ms;
195 template <class GC> struct traits_Elimination_2ms_stat: public
196 cds::intrusive::treiber_stack::make_traits <
197 cds::intrusive::opt::hook< base_hook<GC> >
198 , cds::opt::enable_elimination<true>
199 , cds::opt::elimination_backoff< cds::backoff::delay_of<2> >
200 , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
203 typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Elimination_2ms_stat<cds::gc::HP> > Elimination_HP_2ms_stat;
204 typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_2ms_stat<cds::gc::DHP> > Elimination_DHP_2ms_stat;
206 template <class GC> struct traits_Elimination_5ms: public
207 cds::intrusive::treiber_stack::make_traits <
208 cds::intrusive::opt::hook< base_hook<GC> >
209 , cds::opt::enable_elimination<true>
210 , cds::opt::elimination_backoff< cds::backoff::delay_of<5> >
213 typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Elimination_5ms<cds::gc::HP> > Elimination_HP_5ms;
214 typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_5ms<cds::gc::DHP> > Elimination_DHP_5ms;
216 template <class GC> struct traits_Elimination_5ms_stat: public
217 cds::intrusive::treiber_stack::make_traits <
218 cds::intrusive::opt::hook< base_hook<GC> >
219 , cds::opt::enable_elimination<true>
220 , cds::opt::elimination_backoff< cds::backoff::delay_of<5> >
221 , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
224 typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Elimination_5ms_stat<cds::gc::HP> > Elimination_HP_5ms_stat;
225 typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_5ms_stat<cds::gc::DHP> > Elimination_DHP_5ms_stat;
227 template <class GC> struct traits_Elimination_10ms: public
228 cds::intrusive::treiber_stack::make_traits <
229 cds::intrusive::opt::hook< base_hook<GC> >
230 , cds::opt::enable_elimination<true>
231 , cds::opt::elimination_backoff< cds::backoff::delay_of<10> >
234 typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Elimination_10ms<cds::gc::HP> > Elimination_HP_10ms;
235 typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_10ms<cds::gc::DHP> > Elimination_DHP_10ms;
237 template <class GC> struct traits_Elimination_10ms_stat: public
238 cds::intrusive::treiber_stack::make_traits <
239 cds::intrusive::opt::hook< base_hook<GC> >
240 , cds::opt::enable_elimination<true>
241 , cds::opt::elimination_backoff< cds::backoff::delay_of<10> >
242 , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
245 typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Elimination_10ms_stat<cds::gc::HP> > Elimination_HP_10ms_stat;
246 typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_10ms_stat<cds::gc::DHP> > Elimination_DHP_10ms_stat;
248 template <class GC> struct traits_Elimination_dyn: public
249 cds::intrusive::treiber_stack::make_traits <
250 cds::intrusive::opt::hook< base_hook<GC> >
251 , cds::opt::enable_elimination<true>
252 , cds::opt::buffer< cds::opt::v::initialized_dynamic_buffer<int> >
255 typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Elimination_dyn<cds::gc::HP> > Elimination_HP_dyn;
256 typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_dyn<cds::gc::DHP> > Elimination_DHP_dyn;
258 template <class GC> struct traits_Elimination_stat: public
259 cds::intrusive::treiber_stack::make_traits <
260 cds::intrusive::opt::hook< base_hook<GC> >
261 , cds::opt::enable_elimination<true>
262 , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
265 typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Elimination_stat<cds::gc::HP> > Elimination_HP_stat;
266 typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_stat<cds::gc::DHP> > Elimination_DHP_stat;
268 template <class GC> struct traits_Elimination_dyn_stat: public
269 cds::intrusive::treiber_stack::make_traits <
270 cds::intrusive::opt::hook< base_hook<GC> >
271 , cds::opt::enable_elimination<true>
272 , cds::opt::buffer< cds::opt::v::initialized_dynamic_buffer<int> >
273 , cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
276 typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Elimination_dyn_stat<cds::gc::HP> > Elimination_HP_dyn_stat;
277 typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_dyn_stat<cds::gc::DHP> > Elimination_DHP_dyn_stat;
279 template <class GC> struct traits_Elimination_yield: public
280 cds::intrusive::treiber_stack::make_traits <
281 cds::intrusive::opt::hook< base_hook<GC> >
282 , cds::opt::enable_elimination<true>
283 , cds::opt::back_off<cds::backoff::yield>
284 , cds::opt::memory_model<cds::opt::v::relaxed_ordering>
287 typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Elimination_yield<cds::gc::HP> > Elimination_HP_yield;
288 typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_yield<cds::gc::DHP> > Elimination_DHP_yield;
290 template <class GC> struct traits_Elimination_pause: public
291 cds::intrusive::treiber_stack::make_traits <
292 cds::intrusive::opt::hook< base_hook<GC> >
293 , cds::opt::enable_elimination<true>
294 , cds::opt::back_off<cds::backoff::pause>
297 typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Elimination_pause<cds::gc::HP> > Elimination_HP_pause;
298 typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_pause<cds::gc::DHP> > Elimination_DHP_pause;
300 template <class GC> struct traits_Elimination_exp: public
301 cds::intrusive::treiber_stack::make_traits <
302 cds::intrusive::opt::hook< base_hook<GC> >
303 , cds::opt::enable_elimination<true>
305 cds::backoff::exponential<
312 typedef cds::intrusive::TreiberStack< cds::gc::HP, T, traits_Elimination_exp<cds::gc::HP> > Elimination_HP_exp;
313 typedef cds::intrusive::TreiberStack< cds::gc::DHP, T, traits_Elimination_exp<cds::gc::DHP> > Elimination_DHP_exp;
316 typedef cds::intrusive::FCStack< T > FCStack_slist;
318 struct traits_FCStack_stat:
319 public cds::intrusive::fcstack::make_traits<
320 cds::opt::stat< cds::intrusive::fcstack::stat<> >
323 struct traits_FCStack_elimination:
324 public cds::intrusive::fcstack::make_traits<
325 cds::opt::enable_elimination< true >
328 struct traits_FCStack_elimination_stat:
329 public cds::intrusive::fcstack::make_traits<
330 cds::opt::stat< cds::intrusive::fcstack::stat<> >,
331 cds::opt::enable_elimination< true >
335 struct traits_FCStack_mutex_stat:
336 public cds::intrusive::fcstack::make_traits<
337 cds::opt::stat< cds::intrusive::fcstack::stat<> >
338 ,cds::opt::lock_type< std::mutex >
341 struct traits_FCStack_mutex_elimination:
342 public cds::intrusive::fcstack::make_traits<
343 cds::opt::enable_elimination< true >
344 ,cds::opt::lock_type< std::mutex >
347 struct traits_FCStack_mutex_elimination_stat:
348 public cds::intrusive::fcstack::make_traits<
349 cds::opt::stat< cds::intrusive::fcstack::stat<> >
350 ,cds::opt::enable_elimination< true >
351 ,cds::opt::lock_type< std::mutex >
355 typedef cds::intrusive::FCStack< T, boost::intrusive::slist< T >, traits_FCStack_stat > FCStack_slist_stat;
356 typedef cds::intrusive::FCStack< T, boost::intrusive::slist< T >, traits_FCStack_elimination > FCStack_slist_elimination;
357 typedef cds::intrusive::FCStack< T, boost::intrusive::slist< T >, traits_FCStack_elimination_stat > FCStack_slist_elimination_stat;
358 typedef cds::intrusive::FCStack< T, boost::intrusive::slist< T >, traits_FCStack_mutex_stat > FCStack_slist_mutex_stat;
359 typedef cds::intrusive::FCStack< T, boost::intrusive::slist< T >, traits_FCStack_mutex_elimination > FCStack_slist_mutex_elimination;
360 typedef cds::intrusive::FCStack< T, boost::intrusive::slist< T >, traits_FCStack_mutex_elimination_stat > FCStack_slist_mutex_elimination_stat;
361 typedef cds::intrusive::FCStack< T, boost::intrusive::list< T > > FCStack_list;
362 typedef cds::intrusive::FCStack< T, boost::intrusive::list< T >, traits_FCStack_stat > FCStack_list_stat;
363 typedef cds::intrusive::FCStack< T, boost::intrusive::list< T >, traits_FCStack_elimination > FCStack_list_elimination;
364 typedef cds::intrusive::FCStack< T, boost::intrusive::list< T >, traits_FCStack_elimination_stat > FCStack_list_elimination_stat;
365 typedef cds::intrusive::FCStack< T, boost::intrusive::list< T >, traits_FCStack_mutex_stat > FCStack_list_mutex_stat;
366 typedef cds::intrusive::FCStack< T, boost::intrusive::list< T >, traits_FCStack_mutex_elimination > FCStack_list_mutex_elimination;
367 typedef cds::intrusive::FCStack< T, boost::intrusive::list< T >, traits_FCStack_mutex_elimination_stat > FCStack_list_mutex_elimination_stat;
371 typedef details::StdStack< T, std::stack< T* >, std::mutex > StdStack_Deque_Mutex;
372 typedef details::StdStack< T, std::stack< T* >, cds::sync::spin > StdStack_Deque_Spin;
373 typedef details::StdStack< T, std::stack< T*, std::vector<T*> >, std::mutex > StdStack_Vector_Mutex;
374 typedef details::StdStack< T, std::stack< T*, std::vector<T*> >, cds::sync::spin > StdStack_Vector_Spin;
375 typedef details::StdStack< T, std::stack< T*, std::list<T*> >, std::mutex > StdStack_List_Mutex;
376 typedef details::StdStack< T, std::stack< T*, std::list<T*> >, cds::sync::spin > StdStack_List_Spin;
379 } // namespace istack
383 static inline property_stream& operator <<( property_stream& o, cds::intrusive::treiber_stack::empty_stat const& )
388 static inline property_stream& operator <<( property_stream& o, cds::intrusive::treiber_stack::stat<> const& s )
391 << CDSSTRESS_STAT_OUT( s, m_PushCount )
392 << CDSSTRESS_STAT_OUT( s, m_PopCount )
393 << CDSSTRESS_STAT_OUT( s, m_PushRace )
394 << CDSSTRESS_STAT_OUT( s, m_PopRace )
395 << CDSSTRESS_STAT_OUT( s, m_ActivePushCollision )
396 << CDSSTRESS_STAT_OUT( s, m_PassivePopCollision )
397 << CDSSTRESS_STAT_OUT( s, m_ActivePopCollision )
398 << CDSSTRESS_STAT_OUT( s, m_PassivePushCollision )
399 << CDSSTRESS_STAT_OUT( s, m_EliminationFailed );
403 static inline property_stream& operator <<( property_stream& o, cds::intrusive::fcstack::empty_stat const& )
408 static inline property_stream& operator <<( property_stream& o, cds::intrusive::fcstack::stat<> const& s )
411 << CDSSTRESS_STAT_OUT( s, m_nPush )
412 << CDSSTRESS_STAT_OUT( s, m_nPop )
413 << CDSSTRESS_STAT_OUT( s, m_nFailedPop )
414 << CDSSTRESS_STAT_OUT( s, m_nCollided )
415 << static_cast< cds::algo::flat_combining::stat<> const&>( s );
418 } // namespace cds_test
420 #define CDSSTRESS_TreiberStack_HP( test_fixture ) \
421 CDSSTRESS_Stack_F( test_fixture, Treiber_HP ) \
422 CDSSTRESS_Stack_F( test_fixture, Treiber_HP_seqcst ) \
423 CDSSTRESS_Stack_F( test_fixture, Treiber_HP_pause ) \
424 CDSSTRESS_Stack_F( test_fixture, Treiber_HP_exp ) \
425 CDSSTRESS_Stack_F( test_fixture, Treiber_HP_stat ) \
427 #define CDSSTRESS_TreiberStack_DHP( test_fixture ) \
428 CDSSTRESS_Stack_F( test_fixture, Treiber_DHP ) \
429 CDSSTRESS_Stack_F( test_fixture, Treiber_DHP_pause ) \
430 CDSSTRESS_Stack_F( test_fixture, Treiber_DHP_exp ) \
431 CDSSTRESS_Stack_F( test_fixture, Treiber_DHP_stat )
434 #define CDSSTRESS_EliminationStack_HP( test_fixture ) \
435 CDSSTRESS_Stack_F( test_fixture, Elimination_HP ) \
436 CDSSTRESS_Stack_F( test_fixture, Elimination_HP_2ms ) \
437 CDSSTRESS_Stack_F( test_fixture, Elimination_HP_2ms_stat ) \
438 CDSSTRESS_Stack_F( test_fixture, Elimination_HP_5ms ) \
439 CDSSTRESS_Stack_F( test_fixture, Elimination_HP_5ms_stat ) \
440 CDSSTRESS_Stack_F( test_fixture, Elimination_HP_10ms ) \
441 CDSSTRESS_Stack_F( test_fixture, Elimination_HP_10ms_stat ) \
442 CDSSTRESS_Stack_F( test_fixture, Elimination_HP_seqcst ) \
443 CDSSTRESS_Stack_F( test_fixture, Elimination_HP_pause ) \
444 CDSSTRESS_Stack_F( test_fixture, Elimination_HP_exp ) \
445 CDSSTRESS_Stack_F( test_fixture, Elimination_HP_stat ) \
446 CDSSTRESS_Stack_F( test_fixture, Elimination_HP_dyn ) \
447 CDSSTRESS_Stack_F( test_fixture, Elimination_HP_dyn_stat ) \
450 #define CDSSTRESS_EliminationStack_DHP( test_fixture ) \
451 CDSSTRESS_Stack_F( test_fixture, Elimination_DHP ) \
452 CDSSTRESS_Stack_F( test_fixture, Elimination_DHP_seqcst ) \
453 CDSSTRESS_Stack_F( test_fixture, Elimination_DHP_2ms ) \
454 CDSSTRESS_Stack_F( test_fixture, Elimination_DHP_2ms_stat ) \
455 CDSSTRESS_Stack_F( test_fixture, Elimination_DHP_5ms ) \
456 CDSSTRESS_Stack_F( test_fixture, Elimination_DHP_5ms_stat ) \
457 CDSSTRESS_Stack_F( test_fixture, Elimination_DHP_10ms ) \
458 CDSSTRESS_Stack_F( test_fixture, Elimination_DHP_10ms_stat ) \
459 CDSSTRESS_Stack_F( test_fixture, Elimination_DHP_pause ) \
460 CDSSTRESS_Stack_F( test_fixture, Elimination_DHP_exp ) \
461 CDSSTRESS_Stack_F( test_fixture, Elimination_DHP_stat ) \
462 CDSSTRESS_Stack_F( test_fixture, Elimination_DHP_dyn ) \
463 CDSSTRESS_Stack_F( test_fixture, Elimination_DHP_dyn_stat )
465 #define CDSSTRESS_FCStack_slist( test_fixture ) \
466 CDSSTRESS_Stack_F( test_fixture, FCStack_slist ) \
467 CDSSTRESS_Stack_F( test_fixture, FCStack_slist_stat ) \
468 CDSSTRESS_Stack_F( test_fixture, FCStack_slist_elimination ) \
469 CDSSTRESS_Stack_F( test_fixture, FCStack_slist_elimination_stat ) \
470 CDSSTRESS_Stack_F( test_fixture, FCStack_slist_mutex_stat ) \
471 CDSSTRESS_Stack_F( test_fixture, FCStack_slist_mutex_elimination ) \
472 CDSSTRESS_Stack_F( test_fixture, FCStack_slist_mutex_elimination_stat ) \
474 #define CDSSTRESS_FCStack_list( test_fixture ) \
475 CDSSTRESS_Stack_F( test_fixture, FCStack_list ) \
476 CDSSTRESS_Stack_F( test_fixture, FCStack_list_stat ) \
477 CDSSTRESS_Stack_F( test_fixture, FCStack_list_elimination ) \
478 CDSSTRESS_Stack_F( test_fixture, FCStack_list_elimination_stat ) \
479 CDSSTRESS_Stack_F( test_fixture, FCStack_list_mutex_stat ) \
480 CDSSTRESS_Stack_F( test_fixture, FCStack_list_mutex_elimination ) \
481 CDSSTRESS_Stack_F( test_fixture, FCStack_list_mutex_elimination_stat )
483 #define CDSSTRESS_StdStack( test_fixture ) \
484 CDSSTRESS_Stack_F( test_fixture, StdStack_Deque_Mutex ) \
485 CDSSTRESS_Stack_F( test_fixture, StdStack_Deque_Spin ) \
486 CDSSTRESS_Stack_F( test_fixture, StdStack_Vector_Mutex ) \
487 CDSSTRESS_Stack_F( test_fixture, StdStack_Vector_Spin ) \
488 CDSSTRESS_Stack_F( test_fixture, StdStack_List_Mutex ) \
489 CDSSTRESS_Stack_F( test_fixture, StdStack_List_Spin )
491 #endif // #ifndef CDSSTRESS_INTRUSIVE_STACK_TYPES_H