X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=threads.h;h=a97a04c704449963981fe443a711c64abc716fb3;hb=5d9ce304699f07a7203ca4ceb246b482720c031e;hp=345f42077a2372510d5922cd31d26420ed274cd7;hpb=b01017897db7a4000d3f6f024e0b3800d0f10790;p=model-checker.git diff --git a/threads.h b/threads.h index 345f420..a97a04c 100644 --- a/threads.h +++ b/threads.h @@ -1,8 +1,12 @@ +/** @file threads.h + * @brief Model Checker Thread class. + */ + #ifndef __THREADS_H__ #define __THREADS_H__ #include - +#include "mymemory.h" #include "libthreads.h" typedef int thread_id_t; @@ -16,11 +20,12 @@ typedef enum thread_state { THREAD_COMPLETED } thread_state; +class ModelAction; + +/** @brief A Thread is created for each user-space thread */ class Thread { public: - void * operator new(size_t size); - void operator delete(void *ptr); - Thread(thrd_t *t, void (*func)(), void *a); + Thread(thrd_t *t, void (*func)(void *), void *a); ~Thread(); void complete(); @@ -32,11 +37,19 @@ public: thread_id_t get_id(); thrd_t get_thrd_t() { return *user_thread; } Thread * get_parent() { return parent; } + + void set_creation(ModelAction *act) { creation = act; } + ModelAction * get_creation() { return creation; } + + friend void thread_startup(); + + SNAPSHOTALLOC private: int create_context(); Thread *parent; + ModelAction *creation; - void (*start_routine)(); + void (*start_routine)(void *); void *arg; ucontext_t context; void *stack;