next up previous contents index
Next: 3.6.3 await mit Semaphoren Up: 3.6 Semaphore Previous: 3.6.1 Semaphoren Implementierung

3.6.2 Barriers mit Semaphoren

aufgabe767

 

Eine (inkorrekte, warum ?) Lösung mit await wäre etwa

 VAR    b, n: INTEGER;

b:=0; n:=AnzahlTeilnehmer;

Barrier: atomic b:= b + 1; end;

await tex2html_wrap_inline2613 then b:= 0 end

Tip: Was passiert, wenn ein Prozess ein zweites Mal die Barrier benutzt, wahrend die ubrigen Prozesse noch den then-Zweig ausfuhren?

Eine korrekte Lösung mit Semaphoren ist etwa

       VAR bs, bl: Semaphore;
       VAR b, n: INTEGER;
       seminit(bs, 0); seminit(bl, 1);

       PROCEDURE Barrier();
       VAR   i: INTEGER;
       BEGIN P(bl);
             b:= b + 1;
             IF b < n THEN V(bl); P(bs);
                      ELSE b:=0; V(bl);
                           FOR i:=2 TO n DO V(bs) END; 
                      END;
       END Barrier;

Aufgabe: Verbessern Sie die erste Lösung mit await. Ist die folgende Lösung korrekt ?

 VAR    b, n: INTEGER;

b:=0; n:=AnzahlTeilnehmer;

Barrier: VAR l: INTEGER;

atomic b:= b + 1; l:= b; end;

await tex2html_wrap_inline2613 end;

if l = n then b:= 0 end;

await b = 0 end;

aufgabe776

       VAR bs, bl: Semaphore;
       VAR b, n: INTEGER;
       seminit(bs, 0); seminit(bl, 1);

       PROCEDURE Barrier();
       BEGIN P(bl);
             b:= b + 1;
             IF b < n THEN V(bl); P(bs);
                      ELSE b:=0; V(bl); END; 
             V(bs);
       END Barrier;
Was sind die Vor- und Nachteile der beiden Lösungen mit Semaphoren ?



parallel@rz.uni-mannheim.de
Mon Okt 28 14:38:25 PST 1996