PDA

View Full Version : problema di comprensione algoritmo


Dr.Oga
03-12-2010, 17:40
Stavo studiando le sincronizzazioni e mi sono ritrovato sul cato del test and set


boolean TestandSet(boolean &obiettivo){
boolean valore= obiettivo;
obiettivo=true;
return valore;}

blocco=false di default
do{
while(TestandSet(blocco));
sezione critica
blocco = false;
}while (1) ;

Non mi è chiaro come segue il codice.... alla prima istanza
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?

Ed_Bunker
04-12-2010, 09:32
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.

cionci
05-12-2010, 17:07
Thread chiuso
|
V
http://www.hwupgrade.it/forum/showthread.php?t=1649196