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 int user_main(int argc, char **argv)
55 struct mpmc_boundq_1_alt<int32_t, 1> queue;
58 printf("Adding initial element\n");
60 for (int i = 0; i < 1; i++) {
62 bin = queue.write_prepare();
64 printf("init_write_bin %d, val %d\n", bin, 17);
65 queue.write_publish(bin);
67 bin = queue.read_fetch();
69 printf("init_read: %d, val %d\n", bin, *bin);
70 queue.read_consume(bin);
74 for (int i = 0; i < 3; i++) {
78 printf("Start threads\n");
80 thrd_create(&A, (thrd_start_t)&threadA, &queue);
81 thrd_create(&A1, (thrd_start_t)&threadA, &queue);
82 thrd_create(&B, (thrd_start_t)&threadB, &queue);
87 printf("Threads complete\n");