From: Brian Demsky Date: Tue, 18 Sep 2012 05:15:55 +0000 (-0700) Subject: add mutex files X-Git-Url: http://plrg.eecs.uci.edu/git/?p=c11tester.git;a=commitdiff_plain;h=b3bc21e0aea3e724b129c9e06c75eca68f7b208e add mutex files --- diff --git a/mutex.cc b/mutex.cc new file mode 100644 index 00000000..b31b20a8 --- /dev/null +++ b/mutex.cc @@ -0,0 +1,25 @@ +#include "mutex.h" +#include "model.h" + + +namespace std { +mutex::mutex() : + owner(0), islocked(false) +{ + +} + +void mutex::lock() { + model->switch_to_master(new ModelAction(ATOMIC_LOCK, std::memory_order_seq_cst, this)); +} + +bool mutex::try_lock() { + model->switch_to_master(new ModelAction(ATOMIC_TRYLOCK, std::memory_order_seq_cst, this)); + return thread_current()->get_return_value(); +} + +void mutex::unlock() { + model->switch_to_master(new ModelAction(ATOMIC_UNLOCK, std::memory_order_seq_cst, this)); +} + +} diff --git a/mutex.h b/mutex.h new file mode 100644 index 00000000..1c6c3f36 --- /dev/null +++ b/mutex.h @@ -0,0 +1,18 @@ +#ifndef MUTEX_H +#define MUTEX_H +#include "threads.h" + +namespace std { + class mutex { + public: + mutex(); + ~mutex(); + void lock(); + bool try_lock(); + void unlock(); + private: + thread_id_t owner; + bool islocked; + }; +} +#endif