@@ -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
6061public:
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