ES. 1
Interleaving fra due processi con semafori — quante stringhe possibili?
Il seguente programma concorrente, a seconda dell'interleaving fra i due processi, può stampare una o più stringhe. Indicare quante sono le possibilità e visualizzarle.
Nota: tutti i semafori sono generali e inizializzati a 0.
Nota: tutti i semafori sono generali e inizializzati a 0.
Pro1
s1.V();print("F");
s2.V();
s1.P();
print("C");
Pro2
print("G");s2.P();
print("D");
s1.V();
Simulazione interleaving
0 / 8
Premi Avanti per simulare l'esecuzione passo per passo.
Pro1
Pro2
s1=0
s2=0
Output:
Tutte le possibili uscite:
ES. 2
Cosa fa questo programma concorrente? (s1, s2 inizializzati a 0)
Analizza il comportamento dei due processi P e Q con s1, s2 semafori inizializzati a 0. Cosa stampano e in che ordine?
P
s1.V();s2.P();
print("O");
s2.P();
print("D");
s1.V();
Q
s1.P();print("L");
s2.V();
s2.V();
s1.P();
print("E");
Simulazione passo per passo
0 / 10
Premi Avanti per simulare.
P
Q
s1=0
s2=0
Output:
ES. 3
Modifica i processi per stampare PERSE e PERES usando semafori
Dati i processi P (stampa P, E, E) e Q (stampa R, S), modificali aggiungendo semafori in modo che stampino le parole PERSE e PERES.
P (originale)
print("P");print("E");
print("E");
Q (originale)
print("R");print("S");
Seleziona la parola da ottenere:
ES. 4
Valori di val e possibilità di deadlock
Dati:
P esegue il ciclo
a) Quali sono i valori possibili di
b) È possibile che P o Q restino bloccati indefinitamente?
val=0, sp=new Semaphore(2), sq=new Semaphore(1), mutex=new Semaphore(1).P esegue il ciclo
kp=2 volte, Q il ciclo kq=3 volte.a) Quali sono i valori possibili di
val al termine?b) È possibile che P o Q restino bloccati indefinitamente?
P (kp=2)
while (kp > 0) {sp.P();
mutex.P();
val = val+1;
sq.V();
kp--;
mutex.V();
}
Q (kq=3)
while (kq > 0) {sq.P();
mutex.P();
val = val*2;
sp.V();
kq--;
mutex.V();
}
Simulazione interattiva
0 / 9
Premi Avanti per simulare l'esecuzione.
P (kp=2)
Q (kq=3)
sp=2
sq=1
mutex=1
val=0
Rispondi alle domande:
a) Qual è il valore finale di
val?Il mutex garantisce che val venga modificato da un solo processo per volta. Le operazioni (+1 e *2) si alternano in modo fisso grazie ai semafori sp e sq, dando sempre lo stesso risultato finale.
b) È possibile che P o Q restino bloccati indefinitamente?
sp e sq formano un "ping pong": P fa sp.P() poi sq.V(), Q fa sq.P() poi sp.V(). Il sistema non può bloccarsi perché ogni passo di uno sblocca l'altro.