ms-queue note
[model-checker-benchmarks.git] / ms-queue / testcase1.c
index 9bf12fb62c551940526d8b2cdca6dac5c0e0e8f7..78feaa441f41f087a7b79bd823d69375e2ad45db 100644 (file)
@@ -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,32 @@ int get_thread_num()
 }
 
 bool succ1, succ2;
+atomic_int x[3];
+int idx1, idx2;
 
+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);
+       } else if (pid % 4 == 1) {
+               atomic_store_explicit(&x[1], 1, memory_order_relaxed);
+               enqueue(queue, 1);
+       } else if (pid % 4 == 2) {
+               succ1 = dequeue(queue, &idx1);
+               if (succ1) {
+                       atomic_load_explicit(&x[idx1], memory_order_relaxed);
+               }
+       } else if (pid % 4 == 3) {
+               /*
+               succ2 = dequeue(queue, &idx2);
+               if (succ2) {
+                       atomic_load_explicit(&x[idx2], memory_order_relaxed);
+               }
+               */
        }
 }
 
@@ -56,6 +67,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 +77,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 +90,7 @@ int user_main(int argc, char **argv)
                MODEL_ASSERT(in_sum == out_sum);
        else
                MODEL_ASSERT (false);
-
+*/
        free(param);
        free(threads);
        free(queue);