#include "mymemory.h"
#include "memoryorder.h"
#include "modeltypes.h"
+#include "pthread.h"
/* Forward declarations */
class ClockVector;
class Thread;
class Promise;
-namespace std {
+namespace cdsc {
class mutex;
}
using std::memory_order;
using std::memory_order_relaxed;
+using std::memory_order_consume;
using std::memory_order_acquire;
using std::memory_order_release;
using std::memory_order_acq_rel;
THREAD_YIELD, /**< A thread yield action */
THREAD_JOIN, /**< A thread join action */
THREAD_FINISH, /**< A thread completion action */
+ PTHREAD_CREATE, /**< A pthread creation action */
+ PTHREAD_JOIN, /**< A pthread join action */
+
ATOMIC_UNINIT, /**< Represents an uninitialized atomic */
ATOMIC_READ, /**< An atomic read action */
ATOMIC_WRITE, /**< An atomic write action */
thread_id_t get_tid() const { return tid; }
action_type get_type() const { return type; }
memory_order get_mo() const { return order; }
+ memory_order get_original_mo() const { return original_order; }
+ void set_mo(memory_order order) { this->order = order; }
void * get_location() const { return location; }
modelclock_t get_seq_number() const { return seq_number; }
uint64_t get_value() const { return value; }
uint64_t get_return_value() const;
const ModelAction * get_reads_from() const { return reads_from; }
Promise * get_reads_from_promise() const { return reads_from_promise; }
- std::mutex * get_mutex() const;
+ cdsc::mutex * get_mutex() const;
Node * get_node() const;
void set_node(Node *n) { node = n; }
bool may_read_from(const ModelAction *write) const;
bool may_read_from(const Promise *promise) const;
MEMALLOC
+
+ void set_value(uint64_t val) { value = val; }
+
+ /* to accomodate pthread create and join */
+ Thread * thread_operand;
+ void set_thread_operand(Thread *th) { thread_operand = th; }
private:
const char * get_type_str() const;
/** @brief The memory order for this operation. */
memory_order order;
+ /** @brief The original memory order parameter for this operation. */
+ memory_order original_order;
+
/** @brief A pointer to the memory location for this action. */
void *location;