#include "queue.h"
#include "model-assert.h"
-static int procs = 4;
static queue_t *queue;
static thrd_t *threads;
static unsigned int *input;
}
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 % 4 == 0) {
- input[0] = 17;
- enqueue(queue, input[0]);
- succ1 = dequeue(queue, &output[0]);
- //printf("Dequeue: %d\n", output[0]);
+ atomic_store_explicit(&x[0], 1, memory_order_relaxed);
+ enqueue(queue, 0);
} else if (pid % 4 == 1) {
- input[1] = 37;
- enqueue(queue, input[1]);
- succ2 = dequeue(queue, &output[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);
+ }
+ */
}
}
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;