X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=ms-queue%2Fmain.c;h=210c57a1e208518c6dca9558d0c9d9357e88ca19;hb=037b00400699b8bd88b250d6d5b053a85edb2a61;hp=fefb3861834f0f237aa6ad6f3e7c3b9d903d8d8c;hpb=bead5206c1935e3b499300c7e8b5b41a259a04c6;p=model-checker-benchmarks.git diff --git a/ms-queue/main.c b/ms-queue/main.c index fefb386..210c57a 100644 --- a/ms-queue/main.c +++ b/ms-queue/main.c @@ -7,8 +7,20 @@ static int procs = 2; static int iterations = 1; -private_t private; static queue_t *queue; +static thrd_t *threads; +static int num_threads; + +int get_thread_num() +{ + thrd_t curr = thrd_current(); + int i; + for (i = 0; i < num_threads; i++) + if (curr.priv == threads[i].priv) + return i; + assert(0); + return -1; +} static void parse_args(int argc, char **argv) { @@ -31,45 +43,44 @@ static void parse_args(int argc, char **argv) static void main_task(void *param) { - unsigned i, j; - unsigned val; + unsigned int i, j; + unsigned int val; int pid = *((int *)param); - init_private(pid); for (i = 0; i < iterations; i++) { val = 1 + pid * iterations + i; + printf("worker %d, enqueueing: %u\n", pid, val); enqueue(queue, val); val = dequeue(queue); + printf("worker %d, dequeued: %u\n", pid, val); } } int user_main(int argc, char **argv) { - int i, num_threads; - thrd_t *t; + int i; int *param; parse_args(argc, argv); - iterations = (iterations + (procs >> 1)) / procs; queue = calloc(1, sizeof(*queue)); assert(queue); num_threads = procs; - t = malloc(num_threads * sizeof(thrd_t)); + threads = malloc(num_threads * sizeof(thrd_t)); param = malloc(num_threads * sizeof(*param)); - init_queue(queue); + init_queue(queue, num_threads); for (i = 0; i < num_threads; i++) { param[i] = i; - thrd_create(&t[i], main_task, ¶m[i]); + thrd_create(&threads[i], main_task, ¶m[i]); } for (i = 0; i < num_threads; i++) - thrd_join(t[i]); + thrd_join(threads[i]); free(param); - free(t); + free(threads); free(queue); return 0;