From: Brian Norris Date: Wed, 10 Oct 2012 18:11:55 +0000 (-0700) Subject: mcs-lock: write proper driver X-Git-Tag: pldi2013~52 X-Git-Url: http://demsky.eecs.uci.edu/git/?p=model-checker-benchmarks.git;a=commitdiff_plain;h=463fdde327827240420cc3d0efcf319a5c6b54e2 mcs-lock: write proper driver --- diff --git a/mcs-lock/mcs-lock.cc b/mcs-lock/mcs-lock.cc index 6ba8f18..a541a2e 100644 --- a/mcs-lock/mcs-lock.cc +++ b/mcs-lock/mcs-lock.cc @@ -3,12 +3,38 @@ #include "mcs-lock.h" -struct mcs_mutex mutex; +/* For data race instrumentation */ +#include "librace.h" + +struct mcs_mutex *mutex; +static uint32_t shared; + +void threadA(void *arg) +{ + mcs_mutex::guard g(mutex); + mutex->lock(&g); + printf("store: %d\n", 17); + store_32(&shared, 17); + mutex->unlock(&g); +} + +void threadB(void *arg) +{ + mcs_mutex::guard g(mutex); + mutex->lock(&g); + printf("load: %u\n", load_32(&shared)); + mutex->unlock(&g); +} int user_main(int argc, char **argv) { - mcs_mutex::guard *g = new mcs_mutex::guard(&mutex); - mutex.lock(g); - mutex.unlock(g); + thrd_t A, B; + + mutex = new mcs_mutex(); + + thrd_create(&A, &threadA, NULL); + thrd_create(&B, &threadB, NULL); + thrd_join(A); + thrd_join(B); return 0; }