#include "common.h"
-#include <cds/container/chase-lev-deque.h>
+#include <cds/misc/chase-lev-deque.h>
#include <cds_test/stress_test.h>
#include <cstdlib>
#include <ctime>
#include <iostream>
+#include <memory>
#include <thread>
using namespace std;
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 (true) {
+ int res = deque->steal();
+ if (res != EMPTY && res != ABORT) {
+ sums[index] += res;
+ succ_counts[index]++;
+ } else {
+ break;
+ }
}
}
}
srand(time(NULL));
// Stealer threads
- std::thread *threads = new std::thread[s_nDequeStealerThreadCount];
+ std::unique_ptr<std::thread[]> threads(
+ new std::thread[s_nDequeStealerThreadCount]);
for (ullong i = 0; i < s_nDequeStealerThreadCount; i++) {
threads[i] = std::thread(StealerThread, i);
}