From 463fdde327827240420cc3d0efcf319a5c6b54e2 Mon Sep 17 00:00:00 2001 From: Brian Norris Date: Wed, 10 Oct 2012 11:11:55 -0700 Subject: [PATCH] mcs-lock: write proper driver --- mcs-lock/mcs-lock.cc | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) 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; } -- 2.34.1