|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Aug 2006
Messaggi: 50
|
problema di comprensione algoritmo
Stavo studiando le sincronizzazioni e mi sono ritrovato sul cato del test and set
Codice:
boolean TestandSet(boolean &obiettivo){
boolean valore= obiettivo;
obiettivo=true;
return valore;}
Codice:
do{
while(TestandSet(blocco));
sezione critica
blocco = false;
}while (1) ;
Se blocco è false quando arriva nel while(TestandSet(blocco)); viene chiamata la funzione booleana che ha come parametro &obiettivo, ovvero l'indirizzo fisico di blocco! dopo di che valore assume il valore di obiettivo,e obiettivo assume valore di vero e in fine ritorna valore! Dato che il valore di ritorno di TestandSet è falso, si entra nella sezione critica alla fine della quale si rimposta blocco al valore false...ma non stava di già al valore false? quando si usa obiettivo= true si modifica la cella di memoria di blocco? ricordo male o serve &obiettivo per modificare la cella di memoria?
__________________
Athlon 64 3800+, MB Asus a8n-sli-premium, GeForce 7900gs 256mb ddr3, ram 1gb dual channel kingston, hd1 250gb sata seagate, hd2 160gb sata maxtor |
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9455
|
Come di evince dalla "firma" della procedura TestAndSet il passaggio del parametro avviene per riferimento (Datti un'occhiata all'utilizzo di & nella dichiarazione delle procedure).
Quando esci dal ciclo while interno (Una scandalosa attesa attiva...) significa che il blocco era a 'false' (Ovvero nessun altro concorrente era in sezione critica) L'assegnamento obiettivo = true prima di restituire valore serve per impedire che altri concorrenti entrino in sezione critica mentre sarai tu ad esserci. Al termine della sezione critica metti blocco a false in modo che qualche altro concorrente (uno solo ed in maniera non deterministica) esca dal ciclo di attesa attiva e possa entrare in sezione critica.
__________________
"Il Meglio che si possa ottenere è evitare il peggio." I.C. |
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:36.


















