1 int in = 0, out = 0;//in: 输入指针, out: 输出指针; 2 item buffer[n];//n个缓冲区组成的数组; 3 semaphore mutex = 1, full = 0, empty = n; 4 //mutex: 互斥信号量, 生产者进程和消费者进程都只能互斥访问缓冲区; 5 //full: 资源信号量, 满缓冲区的数量; 6 //empty: 资源信号量, 空缓冲区的数量;//信号量不允许直接参与运算, 故都要定义; 7 8 //生产者程序; 9 void Producer() { 10 do { 11 生产者生产一个产品nextp; 12 wait(empty);//申请一个空缓冲区; 13 wait(mutex);//申请临界资源; 14 buffer[in] = nextp;//将产品添加到缓冲区; 15 in = (in + 1) % n;//类似于循环队列; 16 signal(mutex);//释放临界资源; 17 signal(full);//释放一个满缓冲区; 18 } while (TRUE); 19 } 20 21 //消费者程序; 22 void Consumer() { 23 do { 24 wait(full);//申请一个满缓冲区; 25 wait(mutex);//申请临界资源; 26 nextc = buffer[out];//将产品从缓冲区取出; 27 out = (out + 1) % n;//类似于循环队列; 28 signal(mutex);//释放临界资源; 29 signal(empty);//释放一个空缓冲区; 30 消费者将一个产品nextc消费; 31 } while (TRUE); 32 33 void main(){ 34 cobegin 35 Producer(); 36 Consumer(); 37 coend 38 39 } 40 41 }
原文地址:https://www.cnblogs.com/wangjiaolong/p/12129434.html
时间: 2024-10-07 06:58:03