X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=mcs-lock%2Fmcs-lock.cc;h=ec0cc5df9d55c904d3a5cf9a677f42488371a7bb;hb=a757e79cb775f910bae08e1522029639d8a1ea91;hp=135085f95b9d26bb43e40815a04e36f4452980f6;hpb=43509b349e5d7e4d7044ec462cebe11535d9dd54;p=model-checker-benchmarks.git diff --git a/mcs-lock/mcs-lock.cc b/mcs-lock/mcs-lock.cc index 135085f..ec0cc5d 100644 --- a/mcs-lock/mcs-lock.cc +++ b/mcs-lock/mcs-lock.cc @@ -3,12 +3,41 @@ #include "mcs-lock.h" +/* For data race instrumentation */ +#include "librace.h" + struct mcs_mutex *mutex; +static uint32_t shared; + +void threadA(void *arg) +{ + mcs_mutex::guard g(mutex); + printf("store: %d\n", 17); + store_32(&shared, 17); + mutex->unlock(&g); + mutex->lock(&g); + printf("load: %u\n", load_32(&shared)); +} + +void threadB(void *arg) +{ + mcs_mutex::guard g(mutex); + printf("load: %u\n", load_32(&shared)); + mutex->unlock(&g); + mutex->lock(&g); + printf("store: %d\n", 17); + store_32(&shared, 17); +} 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; }