Występują dwa rodzaje procesów: producent i konsument. Procesy dzielą wspólny zasób którym jest bufor. Zadaniem producenta jest produkowanie porcji i umieszczanie ich w buforze. Zadaniem konsumenta jest pobieranie pojedynczo kolejnych porcji z bufora.
var bufor: buffer; process Producent; ... begin while (true) do begin porcja = produkuj(); ... dodaj_do_bufora(bufor, porcja); ... end; end; process Konsument; ... begin while (true) do begin ... porcja = pobierz_z_bufora(bufor); ... konsumuj(porcja); end; end;
Warianty:
Bufor jest nieograniczony.
Bufor jest ograniczony i ma pojemność N.
Producent produkuje kolejną porcję, dopiero gdy konsument odbierze poprzednią.