30d9da9c79a01080ebfa7de156d04cfa98a99c47
[model-checker-benchmarks.git] / ms-queue / main.c
1 #include "main.h"
2 #include <stdlib.h>
3
4 unsigned procs = 2;
5 unsigned iterations = 1;
6 private_t private;
7 shared_mem_t *smp;
8
9 static void main_task(void *param)
10 {
11         unsigned i, j;
12         unsigned val;
13         int pid = *((int *)param);
14
15         init_memory();
16         init_private(pid);
17         for (i = 0; i < iterations; i++) {
18                 val = private.value;
19                 enqueue(val);
20                 val = dequeue();
21                 private.value++;
22         }
23 }
24
25 int user_main(int argc, char **argv)
26 {
27         int i, num_threads;
28         thrd_t *t;
29         int *param;
30
31         parse_args(argc, argv);
32         iterations = (iterations + (procs >> 1)) / procs;
33
34         smp = (shared_mem_t *)calloc(1, sizeof(shared_mem_t));
35         assert(smp);
36
37         num_threads = procs;
38         t = malloc(num_threads * sizeof(thrd_t));
39         param = malloc(num_threads * sizeof(*param));
40
41         init_queue();
42         for (i = 0; i < num_threads; i++) {
43                 param[i] = i;
44                 thrd_create(&t[i], main_task, &param[i]);
45         }
46         for (i = 0; i < num_threads; i++)
47                 thrd_join(t[i]);
48
49         free(param);
50         free(t);
51         free(smp);
52
53         return 0;
54 }