⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 id.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 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 + -