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?
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?