Spiegazione prattica
<aside>
💡 Coerenza: Si deve garantire che ogni processore, attraverso la propria cache, veda nella stessa locazione di memoria lo stesso identico dato.
</aside>
Shared
- I dati dichiarati fuori dalla regione parallela sono condivisi, quindi questi dati sono accessibili e visibili da tutti i thread simultaneamente. Di default, tutte le variabili nella work sharing region sono shared, ecceto le variabili di iterazione dei loop.
Private
- I dati dichiarati in una regione paralella sono privati per ogni thread, cioè ogni thread avrà una copia locale del dato e lo usera come una variabile temporanea. Non sono inizializzate e il valore non è mantenuto per essere usato fuori dalla regione parallela.
Firstprivate
- Sono come Private, però queste sono inizializzate con un valore
- Porta quindi valori dal contesto esterno (fuori dalla regione parallela) nella regione paralella
Lastprivate
- Sono come private pero il valore originale è modificato dopo il costrutto
- Porta quindi i valori modificati dalla regione paralella nel contesto esterno. (Tutte le modifiche fatte al interno del costrutto parallel si fanno anche sulla variabile originale, quindi le modifiche sono disponibili anche dopo che il costrutto ha finito l'esecuzione)
Reduction
- Un modo sicuro di combinare il lavoro fatto da tutti i thread dopo che il costrutto parallel ha finito.