revert the RCU benchmark back with atomic variables
authorPeizhao Ou <peizhaoo@uci.edu>
Wed, 7 Dec 2016 23:20:29 +0000 (15:20 -0800)
committerPeizhao Ou <peizhaoo@uci.edu>
Wed, 7 Dec 2016 23:20:29 +0000 (15:20 -0800)
read-copy-update/rcu.cc
read-copy-update/rcu.h

index 8c6a956dd18f5d6e4e90ba8c96edce9b0ce600ca..55f3bb9eb5f32aa1aa19fb92e273b6217c5915e0 100644 (file)
@@ -18,14 +18,14 @@ void read(int *data1, int *data2) {
        /**********    Detected Correctness **********/
        Data *res = dataPtr.load(memory_order_acquire);
        /** @OPDefine: true */
-       *data1 = res->data1;
-       *data2 = res->data2;
+       *data1 = res->data1.load(memory_order_relaxed);
+       *data2 = res->data2.load(memory_order_relaxed);
        //load_32(&res->data1);
 }
 
 static void inc(Data *newPtr, Data *prev, int d1, int d2) {
-       newPtr->data1 = prev->data1 + d1;
-       newPtr->data2 = prev->data2 + d2;
+       newPtr->data1.store(prev->data1.load(memory_order_relaxed) + d1, memory_order_relaxed);
+       newPtr->data2.store(prev->data2.load(memory_order_relaxed) + d2, memory_order_relaxed);
 }
 
 /** @Transition: STATE(data1) += data1;
index f40edf4f9fa44db2c321196d177cfb772ee56ca3..c0d20fa6ccbee53d5c698d792f856a726147b30c 100644 (file)
 #include "librace.h"
 
 struct Data {
-       /** Declare atomic just to expose them to CDSChecker */
-       int data1;
-       int data2;
+       // Declare atomic to expose them to CDSChecker.
+    // Otherwise, we might miss the data race reports.
+       atomic_int data1;
+       atomic_int data2;
 };