mcs-queue: a few changes
[model-checker-benchmarks.git] / mcs-queue / main.c
1 #include "main.h"
2 #include <stdlib.h>
3
4 #define NUM_PROCESSORS                  12
5
6 struct tms tim;
7 struct tms tim1;
8
9 int shmid;
10
11 unsigned pid;
12 char* name = "";
13 unsigned procs = 1;
14 unsigned multi = 1;
15 unsigned iterations = 1;
16 unsigned initial_nodes = 0;
17 unsigned repetitions = 1;
18 unsigned work = 0;
19 private_t private;
20 shared_mem_t *smp;
21
22 void time_test()
23 {
24         unsigned i,j;
25         struct tms time_val;
26         clock_t t1, t2;
27         unsigned val;
28
29         if(pid==0) {
30                 init_queue();
31         }
32         init_memory();
33         init_private();
34         for(i=0;i<iterations;i++) {
35                 val = private.value;
36                 enqueue(val);
37                 for(j=0; j<work;) j++;
38                 val = dequeue();
39                 for(j=0; j<work;) j++;
40                 private.value++;
41         }
42 }
43
44 void main_task()
45 {
46         unsigned processor;
47         unsigned i;
48
49         processor = (pid/multi)+1;
50         processor %= NUM_PROCESSORS;
51         for (i=0; i<repetitions; i++) {
52                 time_test();
53         }
54 }
55
56 int user_main(int argc, char **argv)
57 {
58         int i, num_threads;
59         thrd_t *t;
60
61         parse_args(argc, argv);
62         name = argv[0];
63         iterations = (iterations + ((procs*multi)>>1))/(procs*multi);
64
65         smp = (shared_mem_t *)calloc(1, sizeof(shared_mem_t));
66         assert(smp);
67
68         num_threads = procs * multi;
69         t = malloc(num_threads * sizeof(thrd_t));
70
71         for (i = 0; i < num_threads; i++)
72                 thrd_create(&t[i], main_task, NULL);
73         for (i = 0; i < num_threads; i++)
74                 thrd_join(t[i]);
75
76         free(t);
77         free(smp);
78
79         return 0;
80 }