bug fix for atomic adds/subtracts on pointers
[model-checker.git] / mutex.cc
1 #include <mutex>
2
3 #include "model.h"
4 #include "execution.h"
5 #include "threads-model.h"
6 #include "clockvector.h"
7 #include "action.h"
8
9 namespace std {
10
11 mutex::mutex()
12 {
13         state.locked = NULL;
14         thread_id_t tid = thread_current()->get_id();
15         state.alloc_tid = tid;
16         state.alloc_clock = model->get_execution()->get_cv(tid)->getClock(tid);
17 }
18         
19 void mutex::lock()
20 {
21         model->switch_to_master(new ModelAction(ATOMIC_LOCK, std::memory_order_seq_cst, this));
22 }
23         
24 bool mutex::try_lock()
25 {
26         return model->switch_to_master(new ModelAction(ATOMIC_TRYLOCK, std::memory_order_seq_cst, this));
27 }
28
29 void mutex::unlock()
30 {
31         model->switch_to_master(new ModelAction(ATOMIC_UNLOCK, std::memory_order_seq_cst, this));
32 }
33
34 }