diff options
Diffstat (limited to 'src/libthread/threadimpl.h')
-rw-r--r-- | src/libthread/threadimpl.h | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/src/libthread/threadimpl.h b/src/libthread/threadimpl.h new file mode 100644 index 00000000..9f70b0e0 --- /dev/null +++ b/src/libthread/threadimpl.h @@ -0,0 +1,70 @@ +#include <ucontext.h> + +typedef struct Context Context; +typedef struct Proc Proc; +typedef struct _Procrendez _Procrendez; + +enum +{ + STACK = 8192 +}; + +struct Context +{ + ucontext_t uc; +}; + +struct _Thread +{ + _Thread *next; + _Thread *prev; + _Thread *allnext; + _Thread *allprev; + Context context; + uint id; + uchar *stk; + uint stksize; + int exiting; + void (*startfn)(void*); + void *startarg; + Proc *proc; + char name[256]; + char state[256]; +}; + +struct _Procrendez +{ + Lock *l; + int asleep; + pthread_cond_t cond; +}; + +extern void _procsleep(_Procrendez*); +extern void _procwakeup(_Procrendez*); + +struct Proc +{ + pthread_t tid; + Lock lock; + _Thread *thread; + _Threadlist runqueue; + _Threadlist allthreads; + uint nthread; + uint sysproc; + _Procrendez runrend; + Context schedcontext; + void *udata; +}; + +extern Proc *xxx; +#define proc() _threadproc() +#define setproc(p) _threadsetproc(p) + +extern void _procstart(Proc*, void (*fn)(void*)); +extern _Thread *_threadcreate(Proc*, void(*fn)(void*), void*, uint); +extern void _threadexit(void); +extern Proc *_threadproc(void); +extern void _threadsetproc(Proc*); +extern int _threadlock(Lock*, int, ulong); +extern void _threadunlock(Lock*, ulong); + |