📄 id.c
字号:
#include <u.h>#include <libc.h>#include <thread.h>#include "threadimpl.h"intthreadid(void){ return _threadgetproc()->thread->id;}intthreadpid(int id){ int pid; Proc *p; Thread *t; if (id < 0) return -1; if (id == 0) return _threadgetproc()->pid; lock(&_threadpq.lock); for (p = _threadpq.head; p->next; p = p->next){ lock(&p->lock); for (t = p->threads.head; t; t = t->nextt) if (t->id == id){ pid = p->pid; unlock(&p->lock); unlock(&_threadpq.lock); return pid; } unlock(&p->lock); } unlock(&_threadpq.lock); return -1;}intthreadsetgrp(int ng){ int og; Thread *t; t = _threadgetproc()->thread; og = t->grp; t->grp = ng; return og;}intthreadgetgrp(void){ return _threadgetproc()->thread->grp;}voidthreadsetname(char *fmt, ...){ int fd; char buf[128]; va_list arg; Proc *p; Thread *t; p = _threadgetproc(); t = p->thread; if (t->cmdname) free(t->cmdname); va_start(arg, fmt); t->cmdname = vsmprint(fmt, arg); va_end(arg); if(t->cmdname && p->nthreads == 1){ snprint(buf, sizeof buf, "#p/%d/args", getpid()); if((fd = open(buf, OWRITE)) >= 0){ write(fd, t->cmdname, strlen(t->cmdname)+1); close(fd); } }}char*threadgetname(void){ return _threadgetproc()->thread->cmdname;}void**threaddata(void){ return &_threadgetproc()->thread->udata[0];}void**procdata(void){ return &_threadgetproc()->udata;}static Lock privlock;static int privmask = 1;inttprivalloc(void){ int i; lock(&privlock); for(i=0; i<NPRIV; i++) if(!(privmask&(1<<i))){ privmask |= 1<<i; unlock(&privlock); return i; } unlock(&privlock); return -1;}voidtprivfree(int i){ if(i < 0 || i >= NPRIV) abort(); lock(&privlock); privmask &= ~(1<<i);}void**tprivaddr(int i){ return &_threadgetproc()->thread->udata[i];}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -