首页 > 其他 > 详细

信号量解决生产者消费者问题

时间:2020-05-01 00:20:27      阅读:108      评论:0      收藏:0      [点我收藏+]

一、一个生产者、一个消费者共享一个缓冲区

int B;
semaphore empty;  //可以使用的空缓冲区数
semaphore full;  //缓冲区内可以使用的产品数
empty=1;         //缓冲区内允许放入一件产品
full=0;          //缓冲区内没有产品

process producer()
{       
  while(true){               
    produce( );                
    P(empty); //申请空盘子               
    append( ) to B;            
    V(full);   //
   }                         
 }   
 
 process consumer()
 {
    while(true) 
    { 
       P(full);    //消费 
        take( ) from B;
       V(empty);
        consume( );
    }
} 

 

二、一个生产者、一个消费者共享多个缓冲区

三、多个生产者、多个消费者共享多个缓冲区

item B[k];
semaphore empty;    empty=k;  
semaphore full; full=0;      
semaphore mutex=1;  //互斥信号量
int in=0;    //放入缓冲区指针
int out=0;   //取出缓冲区指针?

process producer_i ( ){      
    while(true) 
    {                   
        produce( );                     
        P(empty); //申请临界区资源 
                             
        P(mutex);   //确保唯一操作                      
        append to B[in];             
        in=(in+1)%k;                  
        V(mutex);   
                             
        V(full);                                
    }                                               
}

     
process consumer_j ()
{  
    while(true) 
    {
    P(full);//申请临界区资源 
    
    P(mutex);//确保唯一操作 
    take( ) from B[out];
    out=(out+1)%k; 
    V(mutex);
    
    V(empty);
    consume( ); 
}

 

信号量解决生产者消费者问题

原文:https://www.cnblogs.com/junfblog/p/12811669.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!