Skip to content

Commit e4470e7

Browse files
committed
Merge branch 'fix-multi-queue' into 'master'
Removing static variables from multi queue See merge request interoperability/tampi!55
2 parents 4a87d9f + a941ac9 commit e4470e7

File tree

1 file changed

+12
-12
lines changed

1 file changed

+12
-12
lines changed

src/common/util/MultiLockFreeQueue.hpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ class MultiLockFreeQueue {
5656
alignas(CacheAlignment) PaddedArray<counter_t, MaxQueues> _available;
5757

5858
alignas(CacheAlignment) size_t _totalRemaining;
59+
size_t _current;
5960

6061
public:
6162
MultiLockFreeQueue() :
@@ -66,7 +67,8 @@ class MultiLockFreeQueue {
6667
_tail(),
6768
_head(),
6869
_available(),
69-
_totalRemaining(0)
70+
_totalRemaining(0),
71+
_current(0)
7072
{
7173
if (_queues > MaxQueues)
7274
ErrorHandler::fail("Maximum number of queues exceeded");
@@ -159,7 +161,6 @@ class MultiLockFreeQueue {
159161

160162
size_t cyclicRoundRobinPop(T __restrict__ values[], size_t n)
161163
{
162-
static size_t queue = 0;
163164
if (n == 0)
164165
return 0;
165166

@@ -177,19 +178,19 @@ class MultiLockFreeQueue {
177178
for (size_t q = 0; q < _queues; ++q)
178179
remaining[q] = _remaining[q];
179180

180-
const size_t queue0 = queue;
181+
const size_t queue0 = _current;
181182

182183
size_t missing = n;
183184
while (missing > 0) {
184185
size_t perQueue = std::max<size_t>(missing / _queues, 1);
185186
for (size_t q = 0; missing > 0 && q < _queues; ++q) {
186-
assert(queue < _queues);
187-
size_t avail = std::min<size_t>(remaining[queue], perQueue);
187+
assert(_current < _queues);
188+
size_t avail = std::min<size_t>(remaining[_current], perQueue);
188189
if (avail) {
189-
remaining[queue] -= avail;
190+
remaining[_current] -= avail;
190191
missing -= avail;
191192
}
192-
queue = (queue + 1) % _queues;
193+
_current = (_current + 1) % _queues;
193194
}
194195
}
195196

@@ -212,7 +213,6 @@ class MultiLockFreeQueue {
212213

213214
size_t blockRoundRobinPop(T __restrict__ values[], size_t n)
214215
{
215-
static size_t queue = 0;
216216
if (n == 0)
217217
return 0;
218218

@@ -228,13 +228,13 @@ class MultiLockFreeQueue {
228228

229229
size_t i = 0;
230230
while (i < n) {
231-
assert(queue < _queues);
232-
size_t assigned = std::min<size_t>(_remaining[queue], n - i);
231+
assert(_current < _queues);
232+
size_t assigned = std::min<size_t>(_remaining[_current], n - i);
233233
if (assigned == 0) {
234-
queue = (queue + 1) % _queues;
234+
_current = (_current + 1) % _queues;
235235
continue;
236236
}
237-
unsafePop(queue, values + i, assigned);
237+
unsafePop(_current, values + i, assigned);
238238
i += assigned;
239239
}
240240

0 commit comments

Comments
 (0)