#include "threadimpl.h" int _threadhighnrendez; int _threadnrendez; void _threadsleep(_Procrend *r) { Thread *t; t = _threadgetproc()->thread; r->arg = t; t->nextstate = Rendezvous; t->asleep = 1; unlock(r->l); _sched(); t->asleep = 0; lock(r->l); } void _threadwakeup(_Procrend *r) { Thread *t; t = r->arg; while(t->state == Running) sleep(0); lock(&t->proc->lock); if(t->state == Dead){ unlock(&t->proc->lock); return; } assert(t->state == Rendezvous && t->asleep); t->state = Ready; _threadready(t); unlock(&t->proc->lock); }