Refactors test cases
[libcds.git] / test / stress / misc / deque_driver.cpp
index 8976c3cdc3eed9a5992b7a5e9012d4f491ea8ad9..e7d78969851548ceccade843805ca6670fb8f351 100644 (file)
@@ -12,7 +12,7 @@ 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 {
@@ -31,11 +31,15 @@ protected:
   }
 
   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;
+        }
       }
     }
   }
@@ -93,7 +97,7 @@ TEST_F(ChaseLevDequeTest, DequePushPopTake) {
     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();
   }