📄 chan.c.svn-base
字号:
static char rcsid[] = "$Id: H:/drh/idioms/book/RCS/thread.doc,v 1.11 1997/02/21 19:50:51 drh Exp $";#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;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -