add seqlock
[model-checker-benchmarks.git] / barrier / testcase.cc
1 #include <stdio.h>
2 #include <threads.h>
3
4 #include "barrier-wildcard.h"
5
6 #include "librace.h"
7 #include <atomic> 
8
9 spinning_barrier *barr;
10 std::atomic_int var;
11
12 void threadA(void *arg)
13 {
14         //store_32(&var, 1);
15         var.store(1, std::memory_order_relaxed);
16         barr->wait();
17 }
18
19 void threadB(void *arg)
20 {
21         barr->wait();
22         //printf("var = %d\n", load_32(&var));
23         var.load(std::memory_order_relaxed);
24 }
25
26 #define NUMREADERS 2
27 int user_main(int argc, char **argv)
28 {
29         thrd_t A, B[NUMREADERS];
30         int i;
31
32         barr = new spinning_barrier(NUMREADERS + 1);
33
34         thrd_create(&A, &threadA, NULL);
35         for (i = 0; i < NUMREADERS; i++)
36                 thrd_create(&B[i], &threadB, NULL);
37
38         for (i = 0; i < NUMREADERS; i++)
39                 thrd_join(B[i]);
40         thrd_join(A);
41
42         return 0;
43 }