From: Brian Norris Date: Wed, 10 Oct 2012 23:15:56 +0000 (-0700) Subject: mpmc-queue: driver fixes X-Git-Tag: pldi2013~44 X-Git-Url: http://plrg.eecs.uci.edu/git/?p=model-checker-benchmarks.git;a=commitdiff_plain;h=650879eaa7fc800f453f65c717ccd8c30aa1089b;hp=c446c39fc3b95192f9504d746862b946084a1dfe mpmc-queue: driver fixes * Initialize queue with at least one item * Instrument some racy accesses in driver * Print a little information to see what kind of loops we're stuck in --- diff --git a/mpmc-queue/mpmc-queue.cc b/mpmc-queue/mpmc-queue.cc index b6af7ef..146f11e 100644 --- a/mpmc-queue/mpmc-queue.cc +++ b/mpmc-queue/mpmc-queue.cc @@ -1,3 +1,4 @@ +#include #include #include @@ -5,29 +6,37 @@ #include "mpmc-queue.h" -void threadA(struct mpmc_boundq_1_alt *queue) +void threadA(struct mpmc_boundq_1_alt *queue) { - int *bin = queue->write_prepare(); - *bin = 1; + int32_t *bin = queue->write_prepare(); + store_32(bin, 1); queue->write_publish(); } -void threadB(struct mpmc_boundq_1_alt *queue) +void threadB(struct mpmc_boundq_1_alt *queue) { - int *bin = queue->read_fetch(); - printf("Read: %d\n", *bin); + int32_t *bin = queue->read_fetch(); + printf("Read: %d\n", load_32(bin)); queue->read_consume(); } int user_main(int argc, char **argv) { - struct mpmc_boundq_1_alt queue; + struct mpmc_boundq_1_alt queue; thrd_t A, B; + int32_t *bin = queue.write_prepare(); + store_32(bin, 17); + queue.write_publish(); + + printf("Start threads\n"); + thrd_create(&A, (thrd_start_t)&threadA, &queue); thrd_create(&B, (thrd_start_t)&threadB, &queue); thrd_join(A); thrd_join(B); + printf("Threads complete\n"); + return 0; }