9 #include "mpmc-queue.h"
11 void threadA(struct mpmc_boundq_1_alt<int32_t, 1> *queue)
16 for (int i = 0; i < 1; i++) {
17 bin = queue->write_prepare();
20 queue->write_publish(bin);
21 printf("write_bin %d, val %d\n", bin, 1);
23 printf("write failed\n");
26 bin = queue->read_fetch();
28 printf("read_bin: %d, val %d\n", bin, *bin);
29 queue->read_consume(bin);
31 printf("read failed\n");
37 void threadB(struct mpmc_boundq_1_alt<int32_t, 1> *queue)
40 for (int i = 0; i < 1; i++) {
41 bin = queue->read_fetch();
43 printf("read_bin: %d, val %d\n", bin, *bin);
44 queue->read_consume(bin);
46 printf("read failed\n");
53 void threadC(struct mpmc_boundq_1_alt<int32_t, 1> *queue)
56 bin = queue->write_prepare();
59 queue->write_publish(bin);
60 printf("write_bin %d, val %d\n", bin, 1);
62 printf("write failed\n");
66 int user_main(int argc, char **argv)
68 struct mpmc_boundq_1_alt<int32_t, 1> queue;
69 thrd_t A, A1, B, B1, C, C1;
71 printf("Adding initial element\n");
73 for (int i = 0; i < 0; i++) {
75 bin = queue.write_prepare();
77 printf("init_write_bin %d, val %d\n", bin, 17);
78 queue.write_publish(bin);
82 for (int i = 0; i < 3; i++) {
86 printf("Start threads\n");
88 thrd_create(&A, (thrd_start_t)&threadB, &queue);
89 thrd_create(&A1, (thrd_start_t)&threadC, &queue);
90 thrd_create(&B, (thrd_start_t)&threadB, &queue);
91 thrd_create(&B1, (thrd_start_t)&threadC, &queue);
92 thrd_create(&C, (thrd_start_t)&threadB, &queue);
93 thrd_create(&C1, (thrd_start_t)&threadC, &queue);
101 printf("Threads complete\n");