wait(s) 等价与P操作, signal(s)等价于V操作
生产者-消费者问题
int in = 0, out = 0;
item buffer[n];
semaphore mutex = 1, empty = n, full = 0;
void procuder() {
do {
procuder an item nextp;
...
wait(empty);//表示空缓冲区-1;
wait(mutex);//数据缓冲区互斥访问,关闭访问;
buffer[in] = nextp;
in = (in+1) % n;
signal(mutex);//打开访问
signal(full);//满缓冲区加+1
} while (true);
}
void consumer() {
do {
wait(full);//判断是否有满缓冲区,满缓冲区-1
wait(mutex);
nextc = buffer[out];
out = (out+1) % n;
signal(mutex);
siganl(empty);//空缓冲区+1
consumer the item in nextc;
....
} while (true);
}
void main() {
cobegin
pro