X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=action.h;h=9fa7a91c3f93443714f54ec34b153c4d09a1c20b;hb=088be911a245fefcb5afa168c00c6106f22f336f;hp=ffe60dc5e8e9a33e18a59123c77d6a6fa09f505b;hpb=3519c47202090f3c4a69de0e89aaa2617b17ff75;p=c11tester.git diff --git a/action.h b/action.h index ffe60dc5..9fa7a91c 100644 --- a/action.h +++ b/action.h @@ -32,13 +32,15 @@ typedef enum action_type { THREAD_START, /**< First action in each thread */ THREAD_YIELD, /**< A thread yield action */ THREAD_JOIN, /**< A thread join action */ + THREAD_FINISH, /**< A thread completion action */ ATOMIC_READ, /**< An atomic read action */ ATOMIC_WRITE, /**< An atomic write action */ ATOMIC_RMWR, /**< The read part of an atomic RMW action */ ATOMIC_RMW, /**< The write part of an atomic RMW action */ ATOMIC_RMWC, /**< Convert an atomic RMW action into a READ */ - ATOMIC_INIT /**< Initialization of an atomic object (e.g., + ATOMIC_INIT, /**< Initialization of an atomic object (e.g., * atomic_init()) */ + ATOMIC_FENCE } action_type_t; /* Forward declaration */ @@ -70,6 +72,7 @@ public: bool is_rmwr() const; bool is_rmwc() const; bool is_rmw() const; + bool is_fence() const; bool is_initialization() const; bool is_acquire() const; bool is_release() const; @@ -81,7 +84,9 @@ public: void create_cv(const ModelAction *parent = NULL); ClockVector * get_cv() const { return cv; } void read_from(const ModelAction *act); + void synchronize_with(const ModelAction *act); + bool has_synchronized_with(const ModelAction *act) const; bool happens_before(const ModelAction *act) const; inline bool operator <(const ModelAction& act) const { @@ -96,7 +101,6 @@ public: MEMALLOC private: - void synchronize_with(const ModelAction *act); /** Type of action (read, write, thread create, thread yield, thread join) */ action_type type;