现在的位置: 首页 > 综合 > 正文

PV操作 生产者/消费者

2012年07月07日 ⁄ 综合 ⁄ 共 535字 ⁄ 字号 评论关闭

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); 
   消费该产品; 


抱歉!评论已关闭.