亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? channel.c

?? 比較權(quán)威的p2p仿真軟件
?? C
字號(hào):
/* Copyright (c) 2005 Russ Cox, MIT; see COPYRIGHT */#include "taskimpl.h"Channel*chancreate(int elemsize, int bufsize){	Channel *c;	c = malloc(sizeof *c+bufsize*elemsize);	if(c == nil){		fprint(2, "chancreate malloc: %r");		exit(1);	}	memset(c, 0, sizeof *c);	c->elemsize = elemsize;	c->bufsize = bufsize;	c->nbuf = 0;	c->buf = (uchar*)(c+1);	return c;}/* bug - work out races */voidchanfree(Channel *c){	if(c == nil)		return;	free(c->name);	free(c->arecv.a);	free(c->asend.a);	free(c);}static voidaddarray(Altarray *a, Alt *alt){	if(a->n == a->m){		a->m += 16;		a->a = realloc(a->a, a->m*sizeof a->a[0]);	}	a->a[a->n++] = alt;}static voiddelarray(Altarray *a, int i){	--a->n;	a->a[i] = a->a[a->n];}/* * doesn't really work for things other than CHANSND and CHANRCV * but is only used as arg to chanarray, which can handle it */#define otherop(op)	(CHANSND+CHANRCV-(op))static Altarray*chanarray(Channel *c, uint op){	switch(op){	default:		return nil;	case CHANSND:		return &c->asend;	case CHANRCV:		return &c->arecv;	}}static intaltcanexec(Alt *a){	Altarray *ar;	Channel *c;	if(a->op == CHANNOP)		return 0;	c = a->c;	if(c->bufsize == 0){		ar = chanarray(c, otherop(a->op));		return ar && ar->n;	}else{		switch(a->op){		default:			return 0;		case CHANSND:			return c->nbuf < c->bufsize;		case CHANRCV:			return c->nbuf > 0;		}	}}static voidaltqueue(Alt *a){	Altarray *ar;	ar = chanarray(a->c, a->op);	addarray(ar, a);}static voidaltdequeue(Alt *a){	int i;	Altarray *ar;	ar = chanarray(a->c, a->op);	if(ar == nil){		fprint(2, "bad use of altdequeue op=%d\n", a->op);		abort();	}	for(i=0; i<ar->n; i++)		if(ar->a[i] == a){			delarray(ar, i);			return;		}	fprint(2, "cannot find self in altdq\n");	abort();}static voidaltalldequeue(Alt *a){	int i;	for(i=0; a[i].op!=CHANEND && a[i].op!=CHANNOBLK; i++)		if(a[i].op != CHANNOP)			altdequeue(&a[i]);}static voidamove(void *dst, void *src, uint n){	if(dst){		if(src == nil)			memset(dst, 0, n);		else			memmove(dst, src, n);	}}/* * Actually move the data around.  There are up to three * players: the sender, the receiver, and the channel itself. * If the channel is unbuffered or the buffer is empty, * data goes from sender to receiver.  If the channel is full, * the receiver removes some from the channel and the sender * gets to put some in. */static voidaltcopy(Alt *s, Alt *r){	Alt *t;	Channel *c;	uchar *cp;	/*	 * Work out who is sender and who is receiver	 */	if(s == nil && r == nil)		return;	assert(s != nil);	c = s->c;	if(s->op == CHANRCV){		t = s;		s = r;		r = t;	}	assert(s==nil || s->op == CHANSND);	assert(r==nil || r->op == CHANRCV);	/*	 * Channel is empty (or unbuffered) - copy directly.	 */	if(s && r && c->nbuf == 0){		amove(r->v, s->v, c->elemsize);		return;	}	/*	 * Otherwise it's always okay to receive and then send.	 */	if(r){		cp = c->buf + c->off*c->elemsize;		amove(r->v, cp, c->elemsize);		--c->nbuf;		if(++c->off == c->bufsize)			c->off = 0;	}	if(s){		cp = c->buf + (c->off+c->nbuf)%c->bufsize*c->elemsize;		amove(cp, s->v, c->elemsize);		++c->nbuf;	}}static voidaltexec(Alt *a){	int i;	Altarray *ar;	Alt *other;	Channel *c;	c = a->c;	ar = chanarray(c, otherop(a->op));	if(ar && ar->n){		i = rand()%ar->n;		other = ar->a[i];		altcopy(a, other);		altalldequeue(other->xalt);		other->xalt[0].xalt = other;		taskready(other->task);	}else		altcopy(a, nil);}#define dbgalt 0intchanalt(Alt *a){	int i, j, ncan, n, canblock;	Channel *c;	Task *t;	needstack(512);	for(i=0; a[i].op != CHANEND && a[i].op != CHANNOBLK; i++)		;	n = i;	canblock = a[i].op == CHANEND;	t = taskrunning;	for(i=0; i<n; i++){		a[i].task = t;		a[i].xalt = a;	}if(dbgalt) print("alt ");	ncan = 0;	for(i=0; i<n; i++){		c = a[i].c;if(dbgalt) print(" %c:", "esrnb"[a[i].op]);if(dbgalt) { if(c->name) print("%s", c->name); else print("%p", c); }		if(altcanexec(&a[i])){if(dbgalt) print("*");			ncan++;		}	}	if(ncan){		j = rand()%ncan;		for(i=0; i<n; i++){			if(altcanexec(&a[i])){				if(j-- == 0){if(dbgalt){c = a[i].c;print(" => %c:", "esrnb"[a[i].op]);if(c->name) print("%s", c->name); else print("%p", c);print("\n");}					altexec(&a[i]);					return i;				}			}		}	}if(dbgalt)print("\n");	if(!canblock)		return -1;	for(i=0; i<n; i++){		if(a[i].op != CHANNOP)			altqueue(&a[i]);	}	taskswitch();	/*	 * the guy who ran the op took care of dequeueing us	 * and then set a[0].alt to the one that was executed.	 */	return a[0].xalt - a;}static int_chanop(Channel *c, int op, void *p, int canblock){	Alt a[2];	a[0].c = c;	a[0].op = op;	a[0].v = p;	a[1].op = canblock ? CHANEND : CHANNOBLK;	if(chanalt(a) < 0)		return -1;	return 1;}intchansend(Channel *c, void *v){	return _chanop(c, CHANSND, v, 1);}intchannbsend(Channel *c, void *v){	return _chanop(c, CHANSND, v, 0);}intchanrecv(Channel *c, void *v){	return _chanop(c, CHANRCV, v, 1);}intchannbrecv(Channel *c, void *v){	return _chanop(c, CHANRCV, v, 0);}intchansendp(Channel *c, void *v){	return _chanop(c, CHANSND, (void*)&v, 1);}void*chanrecvp(Channel *c){	void *v;	_chanop(c, CHANRCV, (void*)&v, 1);	return v;}intchannbsendp(Channel *c, void *v){	return _chanop(c, CHANSND, (void*)&v, 0);}void*channbrecvp(Channel *c){	void *v;	_chanop(c, CHANRCV, (void*)&v, 0);	return v;}intchansendul(Channel *c, ulong val){	return _chanop(c, CHANSND, &val, 1);}ulongchanrecvul(Channel *c){	ulong val;	_chanop(c, CHANRCV, &val, 1);	return val;}intchannbsendul(Channel *c, ulong val){	return _chanop(c, CHANSND, &val, 0);}ulongchannbrecvul(Channel *c){	ulong val;	_chanop(c, CHANRCV, &val, 0);	return val;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕视频一区| 亚洲第一在线综合网站| 色久综合一二码| 蜜臀a∨国产成人精品| 国产精品久久久久久久第一福利| 91精品在线免费| www.欧美日韩国产在线| 美日韩黄色大片| 一区二区三区四区激情| 久久九九全国免费| 正在播放亚洲一区| 91在线小视频| 国产91精品入口| 免费成人av在线| 亚洲第一搞黄网站| 亚洲欧美中日韩| 国产亚洲欧美色| 日韩免费高清av| 欧美三级在线播放| 一本大道久久精品懂色aⅴ| 成人午夜av在线| 国产乱淫av一区二区三区| 免播放器亚洲一区| 一区二区不卡在线播放| 亚洲视频综合在线| 国产精品久久毛片av大全日韩| 精品国产网站在线观看| 欧美一级片在线看| 欧美老肥妇做.爰bbww视频| 91麻豆成人久久精品二区三区| 国产精品18久久久久久vr| 久久精品国产99国产| 丝袜诱惑制服诱惑色一区在线观看| 中文字幕日本不卡| 国产精品污网站| 国产精品女上位| 国产精品美女久久久久久久| 国产欧美日韩激情| 欧美激情一区二区三区四区 | 亚洲精品综合在线| 国产精品免费丝袜| 国产精品美女久久久久久久久| 久久久精品国产99久久精品芒果| 欧美精品一区二| 久久久久青草大香线综合精品| 亚洲精品一区二区三区福利| 精品国产污污免费网站入口| 久久久久久麻豆| 久久精品视频在线看| 亚瑟在线精品视频| 日韩美女一区二区三区| 久久久久久毛片| 欧美激情一区不卡| 国产精品久久久久9999吃药| 中文字幕一区在线观看视频| 亚洲日本韩国一区| 一区二区不卡在线视频 午夜欧美不卡在 | 亚洲欧洲国产日本综合| 亚洲精品久久久蜜桃| 亚洲国产成人高清精品| 青青国产91久久久久久| 精品亚洲porn| 99久久久无码国产精品| 在线区一区二视频| 日韩一区二区电影| 国产拍欧美日韩视频二区| 一色桃子久久精品亚洲| 亚洲福利电影网| 精品无人区卡一卡二卡三乱码免费卡| 国产一区在线不卡| 91色乱码一区二区三区| 欧美另类变人与禽xxxxx| 欧美xxx久久| **性色生活片久久毛片| 午夜久久福利影院| 国产成人免费视频一区| 在线观看一区日韩| 亚洲精品一区二区三区99| 亚洲日本va午夜在线影院| 日日摸夜夜添夜夜添精品视频| 国产精品一区二区三区四区| 波多野结衣中文字幕一区 | www国产成人免费观看视频 深夜成人网| 久久精品一区四区| 亚洲一线二线三线久久久| 麻豆视频观看网址久久| 丁香天五香天堂综合| 欧美综合亚洲图片综合区| 337p粉嫩大胆色噜噜噜噜亚洲| 亚洲男人的天堂一区二区 | 高清在线不卡av| 欧美人体做爰大胆视频| 国产午夜三级一区二区三| 亚洲一区二区三区小说| 成人午夜大片免费观看| 欧美一二三四区在线| 成人欧美一区二区三区黑人麻豆 | 一区二区三区在线播放| 黑人精品欧美一区二区蜜桃| 欧美日韩在线播放三区| 欧美激情一区二区三区全黄| 日本欧美久久久久免费播放网| 99久久夜色精品国产网站| 日韩一区二区精品在线观看| 一区二区三区四区亚洲| 成人理论电影网| 精品国精品自拍自在线| 亚洲成人在线免费| 99久久久久久99| 久久影院视频免费| 日韩精彩视频在线观看| 日本道免费精品一区二区三区| 国产亚洲综合性久久久影院| 日本欧美在线看| 欧美性欧美巨大黑白大战| 国产精品第一页第二页第三页| 精品在线免费视频| 91精品国产一区二区| 一二三区精品福利视频| 99久久精品99国产精品| 久久精品视频一区| 韩国av一区二区三区| 日韩欧美不卡一区| 日本在线播放一区二区三区| 欧美影院精品一区| 一区二区三区在线不卡| 91论坛在线播放| 国产精品动漫网站| 不卡的av网站| 国产精品久久久久久久久晋中| 国产福利一区二区三区视频在线 | 肉肉av福利一精品导航| 91福利国产成人精品照片| 国产精品久久久久久久久免费丝袜 | 国产精品理论在线观看| 国产成人精品免费网站| 久久久久久久久99精品| 国产在线看一区| 精品福利一二区| 国产在线国偷精品产拍免费yy| 精品国精品国产| 久久99国产精品久久99| 精品成人一区二区三区| 国产美女一区二区| 久久久久国产成人精品亚洲午夜| 精品亚洲国产成人av制服丝袜 | 一区二区三区四区高清精品免费观看 | 亚洲视频在线观看一区| 91美女福利视频| 亚洲在线中文字幕| 7777精品伊人久久久大香线蕉经典版下载 | 亚洲最大成人网4388xx| 欧美三区免费完整视频在线观看| 亚洲午夜成aⅴ人片| 欧美精品视频www在线观看| 午夜精品一区二区三区电影天堂 | 亚洲女性喷水在线观看一区| 91麻豆国产精品久久| 亚洲一区二区免费视频| 欧美日韩大陆一区二区| 裸体一区二区三区| 国产欧美一区视频| 91免费在线视频观看| 亚洲狠狠爱一区二区三区| 91麻豆精品国产91久久久使用方法 | 黄一区二区三区| 中文字幕制服丝袜一区二区三区| 日本高清免费不卡视频| 美日韩黄色大片| 欧美国产综合色视频| 色一情一伦一子一伦一区| 免费高清在线一区| 国产欧美精品一区二区三区四区| 色屁屁一区二区| 久久电影国产免费久久电影| 中文成人av在线| 制服丝袜亚洲网站| 国产宾馆实践打屁股91| 亚洲在线观看免费视频| 精品粉嫩超白一线天av| 91视频免费观看| 精品制服美女久久| 亚洲一二三四区| 精品成人一区二区| 欧美性xxxxxxxx| 国产精品一区三区| 亚洲国产精品久久人人爱蜜臀 | 欧美视频一区二区三区在线观看| 久久精品国产亚洲5555| 亚洲视频一二区| 精品国产免费视频| 色网综合在线观看| 国产一区二区三区香蕉| 亚洲福利电影网| 中国色在线观看另类| 日韩一区二区三区四区| 一本大道久久a久久精二百| 国产乱码精品1区2区3区| 亚洲h在线观看| 中文字幕一区二区三区在线观看 |