Pracownicy grupują się w zespoły czteroosobowe. Grupowanie prowadzi do ustalenia składu grupy pracownika. W rezultacie poznaje on identyfikatory innych członków zespołu. Po ustaleniu zespołu pracownik przystępuje do pracy zespołowej.
const LICZBA_PRACOWNIKOW = ...; process Pracownik(i: integer) var zespol: array[1..4] of integer; begin while (true) do begin ... { | } zespol := ... { | GRUPOWANIE } ... { | } PRACA_ZESPOLOWA(zespol); end; end; var i: integer; begin cobegin for i:=1 to LICZBA_PRACOWNIKOW do begin Pracownik(i); end; coend; end;
W rozwiązaniu wykorzystana zostaje metoda Przekazywania (Dziedziczenia) Sekcji Krytycznej.
var czworka: array[1..4] of integer; liczba_pracownikow: integer := 0; czekajacy_na_komplet: binary semaphore := 0; ochrona: binary semaphore := 1; process Pracownik(i: integer) var zespol: array[1..4] of integer; begin while (true) do begin P(ochrona); liczba_pracownikow := liczba_pracownikow + 1; czworka[liczba_pracownikow] = i; if (liczba_pracownikow<4) then P(czekajacy_na_komplet); zespol := czworka; liczba_pracownikow := liczba_pracownikow - 1; if (liczba_pracownikow>0) V(czekajacy_na_komplet); else V(ochrona); PRACA_ZESPOLOWA(zespol); end; end;