factor page alignment into function call...place near existing call
[model-checker.git] / userprog.c
1 #include <stdio.h>
2
3 #include "libthreads.h"
4 #include "libatomic.h"
5 #include "librace.h"
6
7 static void a(atomic_int *obj)
8 {
9         int i;
10         int ret;
11
12         store_32(&i, 10);
13         printf("load 32 yields: %d\n", load_32(&i));
14
15         for (i = 0; i < 2; i++) {
16                 printf("Thread %d, loop %d\n", thrd_current(), i);
17                 switch (i % 2) {
18                 case 1:
19                         ret = atomic_load(obj);
20                         printf("Read value: %d\n", ret);
21                         break;
22                 case 0:
23                         atomic_store(obj, i + 1);
24                         printf("Write value: %d\n", i + 1);
25                         break;
26                 }
27         }
28 }
29
30 void user_main()
31 {
32         thrd_t t1, t2;
33         atomic_int obj;
34
35         atomic_init(&obj, 0);
36
37         printf("Thread %d: creating 2 threads\n", thrd_current());
38         thrd_create(&t1, (thrd_start_t)&a, &obj);
39         thrd_create(&t2, (thrd_start_t)&a, &obj);
40
41         thrd_join(t1);
42         thrd_join(t2);
43         printf("Thread %d is finished\n", thrd_current());
44 }