X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=ms-queue%2Ftestcase1.c;h=b416c7df199f0fb6aa982befe74b94d24162fdcd;hb=b684f62b7411fea476b2e1f6a8bbf920ac4c7216;hp=9bf12fb62c551940526d8b2cdca6dac5c0e0e8f7;hpb=1438eb7c0715e53611a717e593bfa3fe1bd30588;p=model-checker-benchmarks.git diff --git a/ms-queue/testcase1.c b/ms-queue/testcase1.c index 9bf12fb..b416c7d 100644 --- a/ms-queue/testcase1.c +++ b/ms-queue/testcase1.c @@ -5,7 +5,6 @@ #include "queue.h" #include "model-assert.h" -static int procs = 2; static queue_t *queue; static thrd_t *threads; static unsigned int *input; @@ -24,20 +23,33 @@ int get_thread_num() } bool succ1, succ2; +atomic_int x[3]; +int idx1, idx2; +unsigned int reclaimNode; +static int procs = 4; static void main_task(void *param) { unsigned int val; int pid = *((int *)param); - if (!pid) { - input[0] = 17; - enqueue(queue, input[0]); - succ1 = dequeue(queue, &output[0]); - //printf("Dequeue: %d\n", output[0]); - } else { - input[1] = 37; - enqueue(queue, input[1]); - succ2 = dequeue(queue, &output[1]); + if (pid % 4 == 0) { + atomic_store_explicit(&x[0], 1, memory_order_relaxed); + enqueue(queue, 0, false); + } else if (pid % 4 == 1) { + atomic_store_explicit(&x[1], 1, memory_order_relaxed); + enqueue(queue, 1, false); + } else if (pid % 4 == 2) { + succ1 = dequeue(queue, &idx1, &reclaimNode); + if (succ1) { + atomic_load_explicit(&x[idx1], memory_order_relaxed); + } + } else if (pid % 4 == 3) { + /* + succ2 = dequeue(queue, &idx2, &reclaimNode); + if (succ2) { + atomic_load_explicit(&x[idx2], memory_order_relaxed); + } + */ } } @@ -56,6 +68,9 @@ int user_main(int argc, char **argv) input = calloc(num_threads, sizeof(*input)); output = calloc(num_threads, sizeof(*output)); + atomic_init(&x[0], 0); + atomic_init(&x[1], 0); + atomic_init(&x[2], 0); init_queue(queue, num_threads); for (i = 0; i < num_threads; i++) { param[i] = i; @@ -63,7 +78,7 @@ int user_main(int argc, char **argv) } for (i = 0; i < num_threads; i++) thrd_join(threads[i]); - +/* for (i = 0; i < num_threads; i++) { in_sum += input[i]; out_sum += output[i]; @@ -76,7 +91,7 @@ int user_main(int argc, char **argv) MODEL_ASSERT(in_sum == out_sum); else MODEL_ASSERT (false); - +*/ free(param); free(threads); free(queue);