标签:连接 消费 while ++ 缓冲 nbsp 类型 cer ext
有界缓冲问题
有n个生产者和m个消费者,连接在一个有k个单位缓冲区的有界缓冲上。其中,pi和cj都是并发进程,只要缓冲区未满,生产者pi生产的产品就可投入缓冲区;只要缓冲区不空,消费者进程cj就可从缓冲区取走并消耗产品。
模型:
int k; //k个单位的缓冲区 typedef anyitem item; //item类型 item buffer[k]; //缓冲区 int in=0,out=0,counter=0; //in是生产者的定位 out是消费者的定位 counter是产品 //生产者线程 process producer(void) { while (true) { {produce an item in nextp} if (counter==k) //缓冲满时,生产者睡眠 sleep(producer); //sleep和wakeup系统内核函数,供应用程序调用 buffer[in]=nextp; in=(in+1)%k; //循环队列 counter++; //产品 if(counter==1) wakeup(consumer); } } //消费者线程 process consumer(void) { while (true) { if (counter==0) //缓冲区空,消费者睡眠 sleep(consumer); nextc=buffer[out]; out=(out+1)%k; //循环对列 counter--; //产品 if(counter==k-1) //缓冲满了,取走一件产品并唤 wakeup(producer); //醒生产者 {consume the item in nextc};//消耗产品 } }
标签:连接 消费 while ++ 缓冲 nbsp 类型 cer ext
原文地址:https://www.cnblogs.com/junfblog/p/12805600.html