码迷,mamicode.com
首页 > 其他好文 > 详细

用记录型信号量解决生产者-消费者问题

时间:2020-01-01 19:09:36      阅读:439      评论:0      收藏:0      [点我收藏+]

标签:定义   允许   问题   访问   style   void   ext   sem   信号   

 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 }

用记录型信号量解决生产者-消费者问题

标签:定义   允许   问题   访问   style   void   ext   sem   信号   

原文地址:https://www.cnblogs.com/wangjiaolong/p/12129434.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!