91b0b9a33f8a4109d82e9334f127534b1d6ec137
[c11tester.git] / mutex.cc
1 #include <mutex>
2
3 #include "model.h"
4 #include "threads-model.h"
5 #include "clockvector.h"
6
7 namespace std {
8 mutex::mutex() {
9         state.islocked=false;
10         thread_id_t tid=thread_current()->get_id();
11         state.alloc_tid=tid;
12         state.alloc_clock=model->get_cv(tid)->getClock(tid);
13 }
14         
15 void mutex::lock() {
16   model->switch_to_master(new ModelAction(ATOMIC_LOCK, std::memory_order_seq_cst, this));
17 }
18         
19 bool mutex::try_lock() {
20   model->switch_to_master(new ModelAction(ATOMIC_TRYLOCK, std::memory_order_seq_cst, this));
21   return thread_current()->get_return_value();
22 }
23
24 void mutex::unlock() {
25   model->switch_to_master(new ModelAction(ATOMIC_UNLOCK, std::memory_order_seq_cst, this));
26 }
27
28 }