X-Git-Url: http://plrg.eecs.uci.edu/git/?p=c11tester.git;a=blobdiff_plain;f=action.cc;h=b9df297ebaf18197d5c9adc2922fcbb4c3d83835;hp=72cf97246765403360275604d1076501e4a94bf7;hb=4752e48158e7c5c90472214c366b0eaa1ec09a71;hpb=db26d1e3370a583f8eef79194c87ba9d2ef92530 diff --git a/action.cc b/action.cc index 72cf9724..b9df297e 100644 --- a/action.cc +++ b/action.cc @@ -53,6 +53,34 @@ ModelAction::ModelAction(action_type_t type, memory_order order, void *loc, } +/** + * @brief Construct a new ModelAction for sleep actions + * + * @param type The type of action: THREAD_SLEEP + * @param order The memory order of this action. A "don't care" for non-ATOMIC + * actions (e.g., THREAD_* or MODEL_* actions). + * @param loc The location that this action acts upon + * @param value The time duration a thread is scheduled to sleep. + * @param _time The this sleep action is constructed + */ +ModelAction::ModelAction(action_type_t type, memory_order order, uint64_t value, uint64_t _time) : + location(NULL), + position(NULL), + time(_time), + last_fence_release(NULL), + uninitaction(NULL), + cv(NULL), + rf_cv(NULL), + value(value), + type(type), + order(order), + original_order(order), + seq_number(ACTION_INITIAL_CLOCK) +{ + Thread *t = thread_current(); + this->tid = t!= NULL ? t->get_id() : -1; +} + /** * @brief Construct a new ModelAction * @@ -212,6 +240,11 @@ bool ModelAction::is_lock() const return type == ATOMIC_LOCK; } +bool ModelAction::is_sleep() const +{ + return type == THREAD_SLEEP; +} + bool ModelAction::is_wait() const { return type == ATOMIC_WAIT; } @@ -645,6 +678,8 @@ const char * ModelAction::get_type_str() const case THREAD_YIELD: return "thread yield"; case THREAD_JOIN: return "thread join"; case THREAD_FINISH: return "thread finish"; + case THREAD_SLEEP: return "thread sleep"; + case THREADONLY_FINISH: return "pthread_exit finish"; case PTHREAD_CREATE: return "pthread create"; case PTHREAD_JOIN: return "pthread join";