From b3bc21e0aea3e724b129c9e06c75eca68f7b208e Mon Sep 17 00:00:00 2001 From: Brian Demsky Date: Mon, 17 Sep 2012 22:15:55 -0700 Subject: [PATCH] add mutex files --- mutex.cc | 25 +++++++++++++++++++++++++ mutex.h | 18 ++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 mutex.cc create mode 100644 mutex.h 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 -- 2.34.1