Sezione critica: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Riga 44:
{{EndMultiCol}}
 
Se i flussi accedessero alla risorsa in tempi diversi, ognuno di essi potrebbe completare la propria operazione (lettura o scrittura) senza essere "disturbato" dall'altro. Se questa condizione vale ''sempre'' per una certa risorsa, allora si dice che la lettura e la scrittura su quella risorsa sono ''operazioni atomiche'': ogni flusso può intervenire solo prima o dopo che l'altro ha eseguitocompletato la propria operazione, e non può interromperla. Il termine "atomiche" è inteso nella sua accezione di "unitarie", "indivisibili". Se ''tutti'' gli accessi ad una risorsa sono atomici, allora non ci sono problemi di sincronizzazione.
 
I problemi sorgono quando le operazioni ''non'' sono atomiche, come in questo caso. Il sistema operativo non ha consapevolezza del fatto che i flussi di esecuzione si cambiano dei byte: invece, vede solo letture e scritture in memoria, e al massimo può garantire che ''queste'' siano singolarmente atomiche. Di conseguenza, può capitare che i flussi A e B intervengano contemporaneamente sulla memoria, e che uno scriva parte dei dati mentre l'altro li sta ancora leggendo, o perfino che il flusso A invii ulteriori byte prima ancora che B abbia avuto il tempo di leggerli. Ciò cambia il comportamento del programma in modo imprevedibile, perché il programmatore non può sapere con quali tempistiche saranno eseguiti i due flussi a tempo di esecuzione.