<aside>
💡 Consistenza in sistemi multi-core o multi-processore: Ci si riferisce al momento in cui il dato può essere letto e quindi la necessità di sincronizzare (e "serializzare") le scritture dei diversi processori o core. Quindi ordine di lettura/scrittura consistente.
</aside>
Critical
- Il codice dentro questo costrutto andrà eseguito da un solo thread, e non simultaneamente da più thread. È utilizzato di solito per proteggere dati condivisi contro la race condition
Atomic
- Gli update di memoria (write o read+modify+write) nella prossima istruzione sara eseguita in modo atomico. Il compiler usa istruzioni hardware speciali per eseguire le istruzioni in un construtto atomic. Queste istruzioni speciali asicurano una miglior performance rispetto a Critical.
- The atomic construct ensures that a specific storage location is accessed atomically, rather than exposing it to the possibility of multiple, simultaneous reading and writing threads that may result in indeterminate values.
Ordered
- Le istruzioni dentro questo costrutto (blocco) sono eseguite in modo sequenziale (forza le letture e scritture sequenziali)
Barrier
- Ogni thread aspetta fino a quando tutti gli altri thread della "squadra" di thread sono arrivati a questo punto. Una regione di work-sharing ha una sincronizzazione Barrier implicita alla fine.
Nowait
- Indica che i thread che finiscono il lavoro a cui sono assegnati possono proccedere senza aspettare il resto dei thread. Se manca questa clausa, allora è attivata la clausa Barrier descritta sopra.