È noto che il linguaggio Java consente ai compilatori di riorganizzare le righe del codice compilato purché il riordino non faccia alcuna differenza per la semantica del codice. Tuttavia, è richiesto al compilatore solo di preoccuparsi della semantica vista dal thread corrente . Se questa ri-ordine colpisce la semantica in una situazione multithread, di solito provoca problemi di concorrenza (visibilità memoria)Modello di memoria Java: compilatore che riordina le righe di codice
La mia domanda (s):
ciò che si ottiene, consentendo questo freedm al compilatore? È davvero possibile per il compilatore produrre codice più efficiente riorganizzando il codice? Devo ancora vedere un caso pratico per questo. A volte mi rendo conto che i vantaggi, se presenti, superano di gran lunga i rischi di concorrenza che questo può comportare.
C'è un modo in cui il programmatore può dire al compilatore di non riorganizzare righe come questa? So che usare le primitive di sincronizzazione gestisce in modo efficace gli effetti collaterali del riorganizzare, ma sto chiedendo se c'è un modo diretto (opzione del compilatore) per disattivarlo?
Questo non fermerà le istruzioni di riordino della CPU. ;) –
E rende il tuo programma eseguito molto lento, quindi questa non è un'opzione che è utile per qualsiasi uso di produzione. – Jesper