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ą.