`

PV操作 生产者/消费者

阅读更多
PV操作 生产者/消费者

P操作-----申请资源
V操作-----释放资源

P(S):①将信号量S的值减1,即S=S-1;
     ②如果S<=0,则该进程继续执行;否则该进程置为等待状态,排入等待队列。
V(S):①将信号量S的值加1,即S=S+1;
     ②如果S>0,则该进程继续执行;否则释放队列中第一个等待信号量的进程。

一组生产者,一组消费者,公用n个环形缓冲区
empty——表示缓冲区是否为空,初值为n。
full——表示缓冲区中是否为满,初值为0。
mutex1——生产者之间的互斥信号量,初值为1。
mutex2——消费者之间的互斥信号量,初值为1。

生产者进程
while(TRUE){
     生产一个产品;
     P(empty);
     P(mutex1);
     产品送往buffer(in);
     in=(in+1)mod n;
     V(mutex1);
     V(full);
}

消费者进程
while(TRUE){
   P(full);
   P(mutex2);
   从buffer(out)中取出产品;
   out=(out+1)mod n;
   V(mutex2);
   V(empty);
   消费该产品;
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics