X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=mutex.cc;h=fa751783dcc4418ddc8087e7ee5b24d566c412a5;hb=5f84c7161ef4e7fd10af8f1936e1d978731d2e5a;hp=a431321e1aba9a11e1d7f56a630978d453ce3d6a;hpb=0229244d21ca78bf781e41684810e9fb6d5ca56c;p=c11tester.git diff --git a/mutex.cc b/mutex.cc index a431321e..fa751783 100644 --- a/mutex.cc +++ b/mutex.cc @@ -8,27 +8,32 @@ namespace cdsc { -mutex::mutex() +mutex::mutex(int type) { state.locked = NULL; - thread_id_t tid = thread_current()->get_id(); + thread_id_t tid = thread_current_id(); state.alloc_tid = tid; - state.alloc_clock = model->get_execution()->get_cv(tid)->getClock(tid); + ClockVector *cv = model->get_execution()->get_cv(tid); + state.alloc_clock = cv == NULL ? 0 : cv->getClock(tid); + + // For recursive mutex + state.type = type; + state.lock_count = 0; } - + void mutex::lock() { - model->switch_to_master(new ModelAction(ATOMIC_LOCK, std::memory_order_seq_cst, this)); + model->switch_thread(new ModelAction(ATOMIC_LOCK, std::memory_order_seq_cst, this)); } - + bool mutex::try_lock() { - return model->switch_to_master(new ModelAction(ATOMIC_TRYLOCK, std::memory_order_seq_cst, this)); + return model->switch_thread(new ModelAction(ATOMIC_TRYLOCK, std::memory_order_seq_cst, this)); } void mutex::unlock() { - model->switch_to_master(new ModelAction(ATOMIC_UNLOCK, std::memory_order_seq_cst, this)); + model->switch_thread(new ModelAction(ATOMIC_UNLOCK, std::memory_order_seq_cst, this)); } }