Eager update predicate trees rather than lazy update; under construction
[c11tester.git] / pthread_test / test.cc
1 /**
2  * @file iriw.cc
3  * @brief Independent read and independent write test
4  */
5
6 #include <atomic>
7 #include <pthread.h>
8 #include <stdio.h>
9 #include <iostream>
10
11 #define N 4
12 //#include "wildcard.h"
13 //#include "model-assert.h"
14
15 using namespace std;
16
17 atomic<int> x(1);
18 atomic<int> y(1);
19
20 int r1, r2, r3, r4; /* "local" variables */
21
22 static void *a(void *obj)
23 {
24         x.store(1, memory_order_relaxed);
25         y.store(1, memory_order_relaxed);
26
27         return new int(1);
28 }
29
30
31 static void *b(void *obj)
32 {
33         y.store(1, memory_order_relaxed);
34         
35         return new int(2);
36 }
37
38 static void *c(void *obj)
39 {
40         r1 = x.load(memory_order_acquire);
41         r2 = y.load(memory_order_relaxed);
42
43         return new int(3);
44 }
45
46 static void *d(void *obj)
47 {
48         r3 = y.load(memory_order_acquire);
49         r4 = x.load(memory_order_relaxed);
50
51         return new int(4);
52 }
53
54
55 int main(int argc, char **argv)
56 {
57         printf("Main thread starts\n");
58
59         x.store(2, memory_order_relaxed);
60         y.store(2, memory_order_relaxed);
61
62         r1 = x.load(memory_order_relaxed);
63         printf("%d\n", r1);
64
65 //      x.compare_exchange_strong(r1, r2);
66 //      r3 = x.load(memory_order_relaxed);
67
68 //      printf("%d\n", r3);
69
70         printf("Main thread is finished\n");
71
72         return 0;
73 }