namespace {
typedef cds_others::ChaseLevDeque Deque;
-static size_t s_nDequeStealerThreadCount = 5;
+static size_t s_nDequeStealerThreadCount = 3;
static size_t s_nDequeMainPassCount = 100000000;
class ChaseLevDequeTest : public cds_test::stress_fixture {
}
static void StealerThread(int index) {
- while (!terminate_stealer.load(memory_order_relaxed)) {
- int res = deque->steal();
- if (res != EMPTY && res != ABORT) {
- sums[index] += res;
- succ_counts[index]++;
+ while (!terminate_stealer.load(memory_order_acquire)) {
+ while (true) {
+ int res = deque->steal();
+ if (res != EMPTY && res != ABORT) {
+ sums[index] += res;
+ succ_counts[index]++;
+ } else {
+ break;
+ }
}
}
}
MainThread(s_nDequeStealerThreadCount, i);
}
- terminate_stealer.store(1, memory_order_relaxed);
+ terminate_stealer.store(1, memory_order_release);
for (ullong i = 0; i < s_nDequeStealerThreadCount; i++) {
threads[i].join();
}