From 5e1443be9f872684a7b40093198bd020a9a2f0bf Mon Sep 17 00:00:00 2001 From: Brian Norris Date: Fri, 5 Oct 2012 17:39:49 -0700 Subject: [PATCH] action: add Thread parameter to constructor We will need to create ModelActions that are forced to associate with a specific Thread (contrary to the Scheduler's knowledge), so add a constructor parameter. --- action.cc | 17 +++++++++++++++-- action.h | 3 ++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/action.cc b/action.cc index c12165b0..09352da0 100644 --- a/action.cc +++ b/action.cc @@ -11,7 +11,20 @@ #define ACTION_INITIAL_CLOCK 0 -ModelAction::ModelAction(action_type_t type, memory_order order, void *loc, uint64_t value) : +/** + * @brief Construct a new ModelAction + * + * @param type The type of action + * @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 (optional) A value associated with the action (e.g., the value + * read or written). Defaults to a given macro constant, for debugging purposes. + * @param thread (optional) The Thread in which this action occurred. If NULL + * (default), then a Thread is assigned according to the scheduler. + */ +ModelAction::ModelAction(action_type_t type, memory_order order, void *loc, + uint64_t value, Thread *thread) : type(type), order(order), location(loc), @@ -20,7 +33,7 @@ ModelAction::ModelAction(action_type_t type, memory_order order, void *loc, uint seq_number(ACTION_INITIAL_CLOCK), cv(NULL) { - Thread *t = thread_current(); + Thread *t = thread ? thread : thread_current(); this->tid = t->get_id(); } diff --git a/action.h b/action.h index dfe2102d..65b060f6 100644 --- a/action.h +++ b/action.h @@ -14,6 +14,7 @@ #include "modeltypes.h" class ClockVector; +class Thread; using std::memory_order; using std::memory_order_relaxed; @@ -66,7 +67,7 @@ class ClockVector; */ class ModelAction { public: - ModelAction(action_type_t type, memory_order order, void *loc, uint64_t value = VALUE_NONE); + ModelAction(action_type_t type, memory_order order, void *loc, uint64_t value = VALUE_NONE, Thread *thread = NULL); ~ModelAction(); void print() const; -- 2.34.1