Add padding option to SegmentedQueue to eliminate false sharing
[libcds.git] / tests / test-hdr / queue / hdr_segmented_queue_dhp.cpp
1 //$$CDS-header$$
2
3 #include "hdr_segmented_queue.h"
4 #include <cds/container/segmented_queue.h>
5 #include <cds/gc/dhp.h>
6
7 namespace queue {
8
9     void HdrSegmentedQueue::SegmQueue_DHP()
10     {
11         typedef cds::container::SegmentedQueue< cds::gc::DHP, item > queue_type;
12         test<queue_type>();
13     }
14
15     void HdrSegmentedQueue::SegmQueue_DHP_mutex()
16     {
17         typedef cds::container::SegmentedQueue< cds::gc::DHP, item,
18             cds::container::segmented_queue::make_traits<
19                 cds::opt::lock_type< std::mutex >
20             >::type
21         > queue_type;
22
23         test<queue_type>();
24     }
25
26     void HdrSegmentedQueue::SegmQueue_DHP_shuffle()
27     {
28         struct queue_traits : public cds::container::segmented_queue::traits
29         {
30             typedef cds::atomicity::item_counter item_counter;
31             typedef cds::opt::v::random_shuffle_permutation<> permutation_generator;
32         };
33         typedef cds::container::SegmentedQueue< cds::gc::DHP, item, queue_traits > queue_type;
34
35         test<queue_type>();
36     }
37
38     void HdrSegmentedQueue::SegmQueue_DHP_stat()
39     {
40         struct queue_traits : public
41             cds::container::segmented_queue::make_traits <
42                 cds::opt::item_counter< cds::atomicity::item_counter >
43                 , cds::opt::permutation_generator< cds::opt::v::random_permutation<> >
44                 , cds::opt::stat < cds::container::segmented_queue::stat<> >
45             > ::type
46         {};
47         typedef cds::container::SegmentedQueue< cds::gc::DHP, item, queue_traits > queue_type;
48
49         test<queue_type>();
50     }
51
52     void HdrSegmentedQueue::SegmQueue_DHP_cacheline_padding()
53     {
54         struct queue_traits : public cds::container::segmented_queue::traits
55         {
56             enum { padding = cds::opt::cache_line_padding };
57         };
58
59         typedef cds::container::SegmentedQueue< cds::gc::DHP, item, queue_traits > queue_type;
60         test<queue_type>();
61     }
62
63     void HdrSegmentedQueue::SegmQueue_DHP_mutex_cacheline_padding()
64     {
65         typedef cds::container::SegmentedQueue< cds::gc::DHP, item,
66             cds::container::segmented_queue::make_traits<
67                 cds::opt::lock_type< std::mutex >
68                 , cds::opt::padding< cds::opt::cache_line_padding >
69             >::type
70         > queue_type;
71
72         test<queue_type>();
73     }
74
75     void HdrSegmentedQueue::SegmQueue_DHP_shuffle_cacheline_padding()
76     {
77         struct queue_traits : public cds::container::segmented_queue::traits
78         {
79             typedef cds::atomicity::item_counter item_counter;
80             typedef cds::opt::v::random_shuffle_permutation<> permutation_generator;
81             enum { padding = cds::opt::cache_line_padding };
82         };
83         typedef cds::container::SegmentedQueue< cds::gc::DHP, item, queue_traits > queue_type;
84
85         test<queue_type>();
86     }
87
88     void HdrSegmentedQueue::SegmQueue_DHP_stat_cacheline_padding()
89     {
90         struct queue_traits : public
91             cds::container::segmented_queue::make_traits <
92                 cds::opt::item_counter< cds::atomicity::item_counter >
93                 , cds::opt::permutation_generator< cds::opt::v::random_permutation<> >
94                 , cds::opt::stat < cds::container::segmented_queue::stat<> >
95                 , cds::opt::padding< cds::opt::cache_line_padding >
96             > ::type
97         {};
98         typedef cds::container::SegmentedQueue< cds::gc::DHP, item, queue_traits > queue_type;
99
100         test<queue_type>();
101     }
102
103 } // namespace queue