Blob
1 #include <ucontext.h>3 typedef struct Context Context;4 typedef struct Proc Proc;5 typedef struct _Procrendez _Procrendez;7 enum8 {9 STACK = 819210 };12 struct Context13 {14 ucontext_t uc;15 };17 struct _Thread18 {19 _Thread *next;20 _Thread *prev;21 _Thread *allnext;22 _Thread *allprev;23 Context context;24 uint id;25 uchar *stk;26 uint stksize;27 int exiting;28 void (*startfn)(void*);29 void *startarg;30 Proc *proc;31 char name[256];32 char state[256];33 };35 struct _Procrendez36 {37 Lock *l;38 int asleep;39 pthread_cond_t cond;40 };42 extern void _procsleep(_Procrendez*);43 extern void _procwakeup(_Procrendez*);45 struct Proc46 {47 pthread_t tid;48 Lock lock;49 _Thread *thread;50 _Threadlist runqueue;51 _Threadlist allthreads;52 uint nthread;53 uint sysproc;54 _Procrendez runrend;55 Context schedcontext;56 void *udata;57 };59 extern Proc *xxx;60 #define proc() _threadproc()61 #define setproc(p) _threadsetproc(p)63 extern void _procstart(Proc*, void (*fn)(void*));64 extern _Thread *_threadcreate(Proc*, void(*fn)(void*), void*, uint);65 extern void _threadexit(void);66 extern Proc *_threadproc(void);67 extern void _threadsetproc(Proc*);68 extern int _threadlock(Lock*, int, ulong);69 extern void _threadunlock(Lock*, ulong);