add subdirectory for tests
[c11tester.git] / pthread_test / test.cc
diff --git a/pthread_test/test.cc b/pthread_test/test.cc
new file mode 100644 (file)
index 0000000..f5b0857
--- /dev/null
@@ -0,0 +1,73 @@
+/**
+ * @file iriw.cc
+ * @brief Independent read and independent write test
+ */
+
+#include <atomic>
+#include <pthread.h>
+#include <stdio.h>
+#include <iostream>
+
+#define N 4
+//#include "wildcard.h"
+//#include "model-assert.h"
+
+using namespace std;
+
+atomic<int> x(1);
+atomic<int> y(1);
+
+int r1, r2, r3, r4; /* "local" variables */
+
+static void *a(void *obj)
+{
+       x.store(1, memory_order_relaxed);
+       y.store(1, memory_order_relaxed);
+
+       return new int(1);
+}
+
+
+static void *b(void *obj)
+{
+       y.store(1, memory_order_relaxed);
+       
+       return new int(2);
+}
+
+static void *c(void *obj)
+{
+       r1 = x.load(memory_order_acquire);
+       r2 = y.load(memory_order_relaxed);
+
+       return new int(3);
+}
+
+static void *d(void *obj)
+{
+       r3 = y.load(memory_order_acquire);
+       r4 = x.load(memory_order_relaxed);
+
+       return new int(4);
+}
+
+
+int main(int argc, char **argv)
+{
+       printf("Main thread starts\n");
+
+       x.store(2, memory_order_relaxed);
+       y.store(2, memory_order_relaxed);
+
+       r1 = x.load(memory_order_relaxed);
+       printf("%d\n", r1);
+
+//     x.compare_exchange_strong(r1, r2);
+//     r3 = x.load(memory_order_relaxed);
+
+//     printf("%d\n", r3);
+
+       printf("Main thread is finished\n");
+
+       return 0;
+}