File tree 9 files changed +18
-54
lines changed
9 files changed +18
-54
lines changed Original file line number Diff line number Diff line change @@ -11,12 +11,8 @@ template <typename T> class LockFreeLifoQueue
11
11
: _capacity(capacity)
12
12
{
13
13
_indexMask = capacity;
14
- _indexMask |= _indexMask >> 1 ;
15
- _indexMask |= _indexMask >> 2 ;
16
- _indexMask |= _indexMask >> 4 ;
17
- _indexMask |= _indexMask >> 8 ;
18
- _indexMask |= _indexMask >> 16 ;
19
- _indexMask |= _indexMask >> 32 ;
14
+ for (usize i = 1 ; i <= sizeof (void *) * 4 ; i <<= 1 )
15
+ _indexMask |= _indexMask >> i;
20
16
_abaOffset = _indexMask + 1 ;
21
17
22
18
_queue = (Node*)Memory::alloc (sizeof (Node) * (capacity + 1 ));
Original file line number Diff line number Diff line change @@ -10,12 +10,8 @@ template <typename T> class LockFreeQueue
10
10
explicit LockFreeQueue (usize capacity)
11
11
{
12
12
_capacityMask = capacity - 1 ;
13
- _capacityMask |= _capacityMask >> 1 ;
14
- _capacityMask |= _capacityMask >> 2 ;
15
- _capacityMask |= _capacityMask >> 4 ;
16
- _capacityMask |= _capacityMask >> 8 ;
17
- _capacityMask |= _capacityMask >> 16 ;
18
- _capacityMask |= _capacityMask >> 32 ;
13
+ for (usize i = 1 ; i <= sizeof (void *) * 4 ; i <<= 1 )
14
+ _capacityMask |= _capacityMask >> i;
19
15
_capacity = _capacityMask + 1 ;
20
16
21
17
_queue = (Node*)Memory::alloc (sizeof (Node) * _capacity);
Original file line number Diff line number Diff line change @@ -10,12 +10,8 @@ template <typename T> class LockFreeQueueCpp11
10
10
explicit LockFreeQueueCpp11 (size_t capacity)
11
11
{
12
12
_capacityMask = capacity - 1 ;
13
- _capacityMask |= _capacityMask >> 1 ;
14
- _capacityMask |= _capacityMask >> 2 ;
15
- _capacityMask |= _capacityMask >> 4 ;
16
- _capacityMask |= _capacityMask >> 8 ;
17
- _capacityMask |= _capacityMask >> 16 ;
18
- _capacityMask |= _capacityMask >> 32 ;
13
+ for (size_t i = 1 ; i <= sizeof (void *) * 4 ; i <<= 1 )
14
+ _capacityMask |= _capacityMask >> i;
19
15
_capacity = _capacityMask + 1 ;
20
16
21
17
_queue = (Node*)new char [sizeof (Node) * _capacity];
Original file line number Diff line number Diff line change @@ -10,12 +10,8 @@ template <typename T> class LockFreeQueueSlow1
10
10
explicit LockFreeQueueSlow1 (usize capacity)
11
11
{
12
12
_capacityMask = capacity - 1 ;
13
- _capacityMask |= _capacityMask >> 1 ;
14
- _capacityMask |= _capacityMask >> 2 ;
15
- _capacityMask |= _capacityMask >> 4 ;
16
- _capacityMask |= _capacityMask >> 8 ;
17
- _capacityMask |= _capacityMask >> 16 ;
18
- _capacityMask |= _capacityMask >> 32 ;
13
+ for (usize i = 1 ; i <= sizeof (void *) * 4 ; i <<= 1 )
14
+ _capacityMask |= _capacityMask >> i;
19
15
_capacity = _capacityMask + 1 ;
20
16
21
17
_queue = (Node*)Memory::alloc (sizeof (Node) * _capacity);
Original file line number Diff line number Diff line change @@ -10,12 +10,8 @@ template <typename T> class LockFreeQueueSlow2
10
10
explicit LockFreeQueueSlow2 (usize capacity)
11
11
{
12
12
_capacityMask = capacity - 1 ;
13
- _capacityMask |= _capacityMask >> 1 ;
14
- _capacityMask |= _capacityMask >> 2 ;
15
- _capacityMask |= _capacityMask >> 4 ;
16
- _capacityMask |= _capacityMask >> 8 ;
17
- _capacityMask |= _capacityMask >> 16 ;
18
- _capacityMask |= _capacityMask >> 32 ;
13
+ for (usize i = 1 ; i <= sizeof (void *) * 4 ; i <<= 1 )
14
+ _capacityMask |= _capacityMask >> i;
19
15
_capacity = _capacityMask + 1 ;
20
16
21
17
_queue = (Node*)Memory::alloc (sizeof (Node) * _capacity);
Original file line number Diff line number Diff line change @@ -10,12 +10,8 @@ template <typename T> class LockFreeQueueSlow3
10
10
explicit LockFreeQueueSlow3 (usize capacity)
11
11
{
12
12
_capacityMask = capacity - 1 ;
13
- _capacityMask |= _capacityMask >> 1 ;
14
- _capacityMask |= _capacityMask >> 2 ;
15
- _capacityMask |= _capacityMask >> 4 ;
16
- _capacityMask |= _capacityMask >> 8 ;
17
- _capacityMask |= _capacityMask >> 16 ;
18
- _capacityMask |= _capacityMask >> 32 ;
13
+ for (usize i = 1 ; i <= sizeof (void *) * 4 ; i <<= 1 )
14
+ _capacityMask |= _capacityMask >> i;
19
15
_capacity = _capacityMask + 1 ;
20
16
21
17
_queue = (Node*)Memory::alloc (sizeof (Node) * _capacity);
Original file line number Diff line number Diff line change @@ -10,12 +10,8 @@ template <typename T> class MutexLockQueue
10
10
explicit MutexLockQueue (usize capacity)
11
11
{
12
12
_capacityMask = capacity - 1 ;
13
- _capacityMask |= _capacityMask >> 1 ;
14
- _capacityMask |= _capacityMask >> 2 ;
15
- _capacityMask |= _capacityMask >> 4 ;
16
- _capacityMask |= _capacityMask >> 8 ;
17
- _capacityMask |= _capacityMask >> 16 ;
18
- _capacityMask |= _capacityMask >> 32 ;
13
+ for (usize i = 1 ; i <= sizeof (void *) * 4 ; i <<= 1 )
14
+ _capacityMask |= _capacityMask >> i;
19
15
_capacity = _capacityMask + 1 ;
20
16
21
17
_queue = (Node*)Memory::alloc (sizeof (Node) * _capacity);
Original file line number Diff line number Diff line change @@ -10,12 +10,8 @@ template <typename T> class SpinLockQueue
10
10
explicit SpinLockQueue (usize capacity)
11
11
{
12
12
_capacityMask = capacity - 1 ;
13
- _capacityMask |= _capacityMask >> 1 ;
14
- _capacityMask |= _capacityMask >> 2 ;
15
- _capacityMask |= _capacityMask >> 4 ;
16
- _capacityMask |= _capacityMask >> 8 ;
17
- _capacityMask |= _capacityMask >> 16 ;
18
- _capacityMask |= _capacityMask >> 32 ;
13
+ for (usize i = 1 ; i <= sizeof (void *) * 4 ; i <<= 1 )
14
+ _capacityMask |= _capacityMask >> i;
19
15
_capacity = _capacityMask + 1 ;
20
16
21
17
_queue = (Node*)Memory::alloc (sizeof (Node) * _capacity);
Original file line number Diff line number Diff line change @@ -26,12 +26,8 @@ class mpmc_bounded_queue
26
26
static inline size_t nextPowerOfTwo (size_t buffer_size)
27
27
{
28
28
size_t result = buffer_size - 1 ;
29
- result |= result >> 1 ;
30
- result |= result >> 2 ;
31
- result |= result >> 4 ;
32
- result |= result >> 8 ;
33
- result |= result >> 16 ;
34
- result |= result >> 32 ;
29
+ for (size_t i = 1 ; i <= sizeof (void *) * 4 ; i <<= 1 )
30
+ result |= result >> i;
35
31
return result + 1 ;
36
32
}
37
33
public:
You can’t perform that action at this time.
0 commit comments