add support for dumping cyclegraphs as dot files... also eliminate redundant edges...
[model-checker.git] / threads.h
index 25b1d6466a4abbb37f0aa633c4a9028cf1459955..87a21ef2633f46f14de70240f052bc50af2adcce 100644 (file)
--- a/threads.h
+++ b/threads.h
@@ -22,12 +22,13 @@ typedef enum thread_state {
        THREAD_CREATED,
        /** Thread is running */
        THREAD_RUNNING,
+       /** Thread is not currently running but is ready to run */
+       THREAD_READY,
        /**
-        * Thread has yielded to the model-checker but is ready to run. Used
-        * during an action that caused a context switch to the model-checking
-        * context.
+        * Thread is waiting on another action (e.g., thread completion, lock
+        * release, etc.)
         */
-       THREAD_READY,
+       THREAD_BLOCKED,
        /** Thread has completed its execution */
        THREAD_COMPLETED
 } thread_state;
@@ -71,21 +72,24 @@ public:
        /** @return True if this thread is finished executing */
        bool is_complete() { return state == THREAD_COMPLETED; }
 
+       /** @return True if this thread is blocked */
+       bool is_blocked() { return state == THREAD_BLOCKED; }
+
        /** @return True if no threads are waiting on this Thread */
        bool wait_list_empty() { return wait_list.empty(); }
 
        /**
-        * Add a thread to the waiting list for this thread.
-        * @param t The Thread to add
+        * Add a ModelAction to the waiting list for this thread.
+        * @param t The ModelAction to add. Must be a JOIN.
         */
-       void push_wait_list(Thread *t) { wait_list.push_back(t); }
+       void push_wait_list(ModelAction *act) { wait_list.push_back(act); }
 
        /**
-        * Remove one Thread from the waiting list
-        * @return The Thread that was removed from the waiting list
+        * Remove one ModelAction from the waiting list
+        * @return The ModelAction that was removed from the waiting list
         */
-       Thread * pop_wait_list() {
-               Thread *ret = wait_list.front();
+       ModelAction * pop_wait_list() {
+               ModelAction *ret = wait_list.front();
                wait_list.pop_back();
                return ret;
        }
@@ -107,11 +111,11 @@ private:
        thread_state state;
 
        /**
-        * A list of Threads waiting on this Thread. Particularly, this list is
-        * used for thread joins, where another Thread waits for this Thread to
-        * complete
+        * A list of ModelActions waiting on this Thread. Particularly, this
+        * list is used for thread joins, where another Thread waits for this
+        * Thread to complete
         */
-       std::vector<Thread *> wait_list;
+       std::vector<ModelAction *> wait_list;
 
        /**
         * The value returned by the last action in this thread