|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
 
  |  | 
 
  |  |  | 
 
  |  | 
 
  |  | 
   
    | Initialization:
    S.count:=1; 
 |  
    | N.count:=0; 
 |  
    | E.count:=k; 
 |  |  | 
 
  |  | 
 
  |  | 
   
    |  |  |  
    | append(v): 
 |  |  
    | b[in]:=v; 
 |  |  
    | in:=(in+1) 
 |  |  
    | mod k; 
 |  |  | 
 
  |  |  | 
   
    |  |  |  |  |  
    | Producer: 
 |  |  
    | repeat 
 |  |  
    | produce v; 
 |  
    | wait(E); 
 |  |  
    | wait(S); 
 |  |  
    | append(v); 
 |  
    | signal(S); 
 |  
    | signal(N); 
 |  
    | forever 
 |  |  |  | 
   
    |  |  |  |  |  |  
    | Consumer: 
 |  |  
    | repeat 
 |  |  
    | wait(N); 
 |  |  
    | wait(S); 
 |  |  
    | w:=take(); 
 |  |  
    | signal(S); 
 |  |  
    | signal(E); 
 |  |  
    | consume(w); 
 |  
    | forever 
 |  |  |  | 
 
  |  |  |  | 
 
  |  | 
   
    |  |  |  |  
    | take(): 
 |  |  
    | w:=b[out]; 
 |  |  
    | out:=(out+1) 
 |  
    | mod k; 
 |  
    | return
    w; 
 |  |  |  |  |  | 
 
  |  |  | 
 
  |  | 
 
  |  |  |  | 
 
  |  |  |  |  | 
 
  |  |  |  |  |  | 
 
  |  |  |  | 
 
  |  |  | 
 
  |  |