From 619085f0b4a85104ef6c7496f9ce1f46e9b17c82 Mon Sep 17 00:00:00 2001 From: rsc Date: Sat, 25 Dec 2004 21:57:50 +0000 Subject: more new libthread --- src/libthread/threadimpl.h | 70 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 src/libthread/threadimpl.h (limited to 'src/libthread/threadimpl.h') 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 + +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); + -- cgit v1.2.3