Pages: [1]   Go Down
Print
Author Topic: esercizio semaforo  (Read 1144 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Chuck_son
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 1.583



WWW
« on: 29-05-2012, 14:14:00 »

EDIT: scusate nel post precedente è stata fatta la stessa domanda in post successivi e non l'ho vista  

Supponiamo di avere 3 processi che condividono una variabile x e che i loro pseudo-codici siano
i seguenti:

P1:                      P2:               P3:
wait(S)                wait(R)         wait(T)
x=x-2                 x=x+2          if (x<0) signal(R)
signal(T)             signal(T)        wait(T)
wait(S)               wait(R)          print(x)
x=x-1
signal(T)



Determinare l’output del processo P3 assumendo che il valore iniziale di x ` 1 e che i 3 semafori
e
abbiano i seguenti valori iniziali: S=1, R=0, T=0.

questa è la soluzione che ho trovato  :

L'unico processo che può partire è P1, fa una wait su S, ora le variabili valgono
X=1 S=0 R=0 T=0

P1: x=x-2  //Ora x vale -1
signal(T) //Ora T vale 1
wait(S)  //Si blocca aspettando che S torni 1

X=-1 S=0 R=0 T=1
L'unico processo che può partire è P3, fa una wait su T:
X=-1 S=0 R=0 T=0

P3:
 if (x<0) signal(R)  //Verificato R=1
wait(T) //T è zero si blocca aspettando che T torni 1

Ora l'unico processo che può partire è P2, fa una wait su R:
X=-1 S=0 R=0 T=0
P2:
x=x+2 //X=1
signal(T) // T=1
wait(R) //Si blocca

X=1 S=0 R=0 T=1
P3 è l'unico processo ad aspettare su T, quindi può proseguire:
P3:
print(x)

Output 1
« Last Edit: 29-05-2012, 14:26:02 by Chuck_son » Logged

Aliens Exist
Pages: [1]   Go Up
Print
Jump to: