信號量解決生產者消費者問題

1、一個生產者、一個消費者共享一個緩衝區app

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( );
    }
} 

 

2、一個生產者、一個消費者共享多個緩衝區spa

3、多個生產者、多個消費者共享多個緩衝區指針

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( ); 
}
相關文章
相關標籤/搜索