- Occorre coordinare la sequenza temporale degli accessi (per evitare i data race)
Consistenza della memoria mediante lock
- Occorre che la lettura di una cella di memoria avvenga dopo che la scrittura della stessa cella da una parte di un altro processo, logicamente eseguito prima, sia terminato
- Questa cosa non è garantita per
- Esecuzione fuori ordine
- Esecuzione su più thread
<aside>
💡 Data race sulla memoria principale → Lock di una cella di memoria e unlock (atomic operations)
</aside>
- Il lock è una proprietà definita via SW (librerie dal SO o compilatore (openmp))
- Una tipica operazione di lock prevede lo scambio dei dati tra un registro ed una cella di memoria: nessun altro processore o processo può inserirsi fino a quando l'operazione atomica non è terminata
- in MIPS esistono le istruzioni ll (load linked) e sc (store conditional) che aiutano con il concetto di lock.
- Viene inserito un meccanismo hardware di blocco di una cella di memoria (lock o lucchetto)
- Viene gestito dalla parallelizzazione attraverso il sotto-sistema di controllo della memoria (libreria del SO)