Test-and-set: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Ho aggiunto una descrizione più dettagliata |
Nessun oggetto della modifica |
||
Riga 2:
<source lang="Cpp">
bool val;
val = *target;
*target =
return val;
}
</source>
</source>L'istruzione permette a più processi coordinanti di modificare una variabile condivisa senza incorrere nell'inconsistenza dei dati cioè modificandola senza il rischio che con la prelazione del sistema operativo un processo non concluda la modifica dei dati portando così a risultati imprevedibili. La zona di codice in cui il programma modifica questi dati condivisi è detta sezione critica. L'obiettivo è che su n processi solamente uno entri in sezione critica evitando così che altri processi cooperanti ad esso accedano a dati non ancora completamente modificati, mantenendo la coerenza dei dati. ▼
▲
<source lang = "Cpp">
bool lock = FALSE;
while(...){
while(Test-and-Set(lock)) ; //il processo attende: qualcun altro è in sezione critica
// -- SEZIONE CRITICA --
lock = FALSE; //il processo è uscito da SC: permette ad un altro processo di entrare
// -- RESTO DEL CODICE
}
</source>
In questo esempio di implementazione del Test and Set il primo processo che accede all'interno del primo while può entrare in sezione critica dato che lock è inizializzato a FALSE. Il test&set però imposta ora lock a TRUE impedendo così a tutti gli altri processi che incorrono di entrare in SC e quindi "sospendendo" la loro esecuzione al secondo while (busy wait). Quando il processo iniziale ha concluso la SC imposta lock a false permettendo ad un altro processo di entrare proprio nello stesso modo in cui il primo processo è entrato.
{{Portale|informatica}}
| |||