#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); | |
} | |