Risposta: Sì, è possibile che il filo T2 possa stampare x = 0. Perché? perché senza alcuna istruzione al compilatore, ad es. sincronizzato o volatile, bExit = true potrebbe venire prima di x = 1 nel riordino del compilatore. Anche x = 1 potrebbe non diventare visibile in Thread 2, quindi Thread 2 caricherà x = 0. Ora, come lo aggiustate? Quando ho posto questa domanda a un paio di programmatori che rispondono in modo diverso, uno suggerisce di rendere entrambi i thread sincronizzati su un mutex comune, un altro dice rendere entrambe variabili variabili. Entrambi sono corretti, in quanto impediscono il riordino e garantiscono la visibilità. Ma la migliore risposta è che devi solo rendere bExit come volatile, quindi Thread 2 può solo stampare "x = 1". x non ha bisogno di essere volatile perché x non può essere riordinato per venire dopo bExit = true quando bExit è volatile.
Sì, è possibile, poiché non sono presenti/impliciti accade prima che vengano stabilite relazioni. (Anche se il codice più completo dovrebbe essere generalmente incluso in tale domanda, preferibilmente quello che viene eseguito.) – user2864740
@Dhaval: Pls accetta la risposta se la tua domanda ha una risposta. –