一、一個生產者、一個消費者共享一個緩沖區
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( ); }