Altamaru
Utente giovane
Regione: Puglia
Prov.: Bari
Città: Bari
|
Inserito il - 05/07/2010 : 17:40:28
|
Nelle dispense trovate su questo forum l'algoritmo di Peterson è così definito:
var flag: array [0 .. 1] of boolean; turno: 0 .. 1; procedure P0; begin repeat flag [0] := true; turno := 1; while flag [1] and turno = 1 do { nulla }; < sezione critica >; flag [0] := false; < resto del programma > forever end; procedure P1; begin repeat flag [1] := true; turno := 0; while flag [0] and turno = 0 do { nulla }; < sezione critica >; flag [1] := false; < resto del programma > forever end; MAINProgram begin flag [0] := false; flag [1] := false; turno := 1; parbegin P0; P1 parend end
e viene spiegato così: P0 dà a P1 il turno=1, prima che quest'ultimo entri nella sezione critica. P1 entrerà nella sezione critica non solo se turno=1 ma solo se anche flag[1] è vero. Quando poi P1 esce dalla sezione critica, sposta flag[1] a falso. In questo momento P0 che aveva dato il turno a P1 vedendo flag[1] falso ed avendo ottenuto turno=0 da P1 prima che questi entrasse nella sezione critica, è ora nelle condizioni di entrare nella sezione critica.
La parte in grassetto non è sbagliata? Per uscire dal ciclo di while non basta che sia negata almeno una delle due condizioni? Quindi in pratica dovrebbe essere: P1 entrerà nella sezione critica sia se turno=1 sia se flag[1] è vero.
|
|