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