4d35fba698c29a9a6a3d4b0d66ef1a8dfff6298b
[cdsspec-compiler.git] / benchmark / seqlock / seqlock.cc
1 #include <iostream>
2 #include <threads.h>
3
4 #include "seqlock.h"
5
6 seqlock *lock;
7
8 int *readD1;
9 int *readD2;
10 static void read_thrd(void *obj) {
11         readD1 = new int;
12         readD2 = new int;
13         lock->read(readD1, readD2);
14         cout << "Read: d1 = " << *readD1 << ", d2 = " << *readD2 << endl;
15 }
16
17 static void write_thrd1(void *obj) {
18         int d1 = 1, d2 = 0;
19         lock->write(1, 0);
20         cout << "Write: d1 = " << d1 << ", d2 = " << d2 << endl;
21 }
22
23 static void write_thrd2(void *obj) {
24         int d1 = 1, d2 = 2;
25         lock->write(1, 2);
26         cout << "Write: d1 = " << d1 << ", d2 = " << d2 << endl;
27 }
28
29 int user_main(int argc, char *argv[]) {
30         lock = new seqlock;
31         thrd_t t1, t2, t3;
32         thrd_create(&t1, &read_thrd, NULL);
33         thrd_create(&t2, &write_thrd1, NULL);
34         thrd_create(&t3, &write_thrd2, NULL);
35
36         thrd_join(t1);
37         thrd_join(t2);
38         thrd_join(t3);
39         
40         return 0;
41 }