9 #include "mpmc-queue.h"
11 void threadA(struct mpmc_boundq_1_alt<int32_t, 1> *queue)
15 bin = queue->write_prepare();
18 printf("write_bin %d, val %d\n", bin, 1);
19 queue->write_publish(bin);
21 printf("write failed\n");
25 for (int i = 0; i < 1; i++) {
26 bin = queue->write_prepare();
29 queue->write_publish(bin);
30 printf("write_bin %d, val %d\n", bin, 1);
32 printf("write failed\n");
35 bin = queue->read_fetch();
37 printf("read_bin: %d, val %d\n", bin, *bin);
38 queue->read_consume(bin);
40 printf("read failed\n");
46 void threadB(struct mpmc_boundq_1_alt<int32_t, 1> *queue)
49 for (int i = 0; i < 1; i++) {
50 bin = queue->read_fetch();
52 printf("read_bin: %d, val %d\n", bin, *bin);
53 queue->read_consume(bin);
55 printf("read failed\n");
62 int user_main(int argc, char **argv)
64 struct mpmc_boundq_1_alt<int32_t, 1> queue;
67 printf("Adding initial element\n");
69 for (int i = 0; i < 1; i++) {
71 bin = queue.write_prepare();
73 printf("init_write_bin %d, val %d\n", bin, 17);
74 queue.write_publish(bin);
76 bin = queue.read_fetch();
78 printf("init_read: %d, val %d\n", bin, *bin);
79 queue.read_consume(bin);
83 for (int i = 0; i < 3; i++) {
87 printf("Start threads\n");
89 thrd_create(&A, (thrd_start_t)&threadA, &queue);
90 thrd_create(&A1, (thrd_start_t)&threadA, &queue);
91 thrd_create(&B, (thrd_start_t)&threadB, &queue);
96 printf("Threads complete\n");