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

📄 chan.c.svn-base

📁 纯C数据结构
💻 SVN-BASE
字号:
#include <string.h>#include "assert.h"#include "mem.h"#include "chan.h"#include "sem.h"#define T Chan_Tstruct T {	const void *ptr;	int *size;	Sem_T send, recv, sync;};T Chan_new(void) {	T c;	NEW(c);	Sem_init(&c->send, 1);	Sem_init(&c->recv, 0);	Sem_init(&c->sync, 0);	return c;}int Chan_send(Chan_T c, const void *ptr, int size) {	assert(c);	assert(ptr);	assert(size >= 0);	Sem_wait(&c->send);	c->ptr = ptr;	c->size = &size;	Sem_signal(&c->recv);	Sem_wait(&c->sync);	return size;}int Chan_receive(Chan_T c, void *ptr, int size) {	int n;	assert(c);	assert(ptr);	assert(size >= 0);	Sem_wait(&c->recv);	n = *c->size;	if (size < n)		n = size;	*c->size = n;	if (n > 0)		memcpy(ptr, c->ptr, n);	Sem_signal(&c->sync);	Sem_signal(&c->send);	return n;}static char rcsid[] = "$RCSfile: RCS/thread.doc,v $ $Revision: 1.7 $";

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -