📄 kill.c
字号:
#include <u.h>#include <libc.h>#include <thread.h>#include "threadimpl.h"static void tinterrupt(Proc*, Thread*);static voidthreadxxxgrp(int grp, int dokill){ Proc *p; Thread *t; lock(&_threadpq.lock); for(p=_threadpq.head; p; p=p->next){ lock(&p->lock); for(t=p->threads.head; t; t=t->nextt) if(t->grp == grp){ if(dokill) t->moribund = 1; tinterrupt(p, t); } unlock(&p->lock); } unlock(&_threadpq.lock); _threadbreakrendez();}static voidthreadxxx(int id, int dokill){ Proc *p; Thread *t; lock(&_threadpq.lock); for(p=_threadpq.head; p; p=p->next){ lock(&p->lock); for(t=p->threads.head; t; t=t->nextt) if(t->id == id){ if(dokill) t->moribund = 1; tinterrupt(p, t); unlock(&p->lock); unlock(&_threadpq.lock); _threadbreakrendez(); return; } unlock(&p->lock); } unlock(&_threadpq.lock); _threaddebug(DBGNOTE, "Can't find thread to kill"); return;}voidthreadkillgrp(int grp){ threadxxxgrp(grp, 1);}voidthreadkill(int id){ threadxxx(id, 1);}voidthreadintgrp(int grp){ threadxxxgrp(grp, 0);}voidthreadint(int id){ threadxxx(id, 0);}static voidtinterrupt(Proc *p, Thread *t){ switch(t->state){ case Running: postnote(PNPROC, p->pid, "threadint"); break; case Rendezvous: _threadflagrendez(t); break; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -