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 void threadC(struct mpmc_boundq_1_alt<int32_t, 1> *queue)
65 bin = queue->write_prepare();
68 queue->write_publish(bin);
69 printf("write_bin %d, val %d\n", bin, 1);
71 printf("write failed\n");
75 int user_main(int argc, char **argv)
77 struct mpmc_boundq_1_alt<int32_t, 1> queue;
78 thrd_t A, A1, B, B1, C, C1;
80 printf("Adding initial element\n");
82 for (int i = 0; i < 0; i++) {
84 bin = queue.write_prepare();
86 printf("init_write_bin %d, val %d\n", bin, 17);
87 queue.write_publish(bin);
89 bin = queue.read_fetch();
91 printf("init_read: %d, val %d\n", bin, *bin);
92 queue.read_consume(bin);
97 for (int i = 0; i < 3; i++) {
101 printf("Start threads\n");
103 thrd_create(&A, (thrd_start_t)&threadB, &queue);
104 thrd_create(&A1, (thrd_start_t)&threadC, &queue);
105 thrd_create(&B, (thrd_start_t)&threadB, &queue);
106 thrd_create(&B1, (thrd_start_t)&threadC, &queue);
107 thrd_create(&C, (thrd_start_t)&threadB, &queue);
108 thrd_create(&C1, (thrd_start_t)&threadC, &queue);
116 printf("Threads complete\n");