设有一缓冲池 P , P 中含有 20 个可用缓冲区,一个输入进程将外部数据读入 P ,另有
一个输出进程将 P 中数据取出并输出。若进程每次操作均以一个缓冲区为单位,试用记录
型信号量写出两个进程的同步算法。
Semaphore empty=20; //空缓冲区的大小 Semaphore full=0; //有数据的缓冲区的大小 Semaphore mutex=1; //互斥信号量 int in=0,out=0; Input() { while(true) { produce an item in nextp; //产生一个商品暂存在nextp中 wait(empty); wait(mutex); p[in]=nextp; in=(in+1)%20; signal(mutex); signal(full); } } Output() { while(true) { wait(full); wait(mutex); nextc=p[out]; out=(out+1)%20; signal(mutex); signal(empty); } }
void put() { while(true) { wait(empty); wait(mutex); 将数据放入缓冲区buffer[in]; signal(mutex); signal(full); } } void get() { while(true) { wait(full); wait(mutex); 从缓冲区buffer[out]取走一个数据; signal(mutex); signal(empty); } } semphore mutex=1,empty=n;full=0; message buffer[n]; int in=0,out=0; void main{ parbegin(put,get); }