Au niveau du Thread 2, while(!regarde) {} ne fait rien tant que regarde est false, et reboucle. On ne peut sortir de là que lorsque regarde est true.
Du coup, quand on passe à la ligne suivante dans le Thread 2 (print(valeur);), le Thread 1 a déjà affecté la valeur 1, qui peut être affichée. Mais potentiellement, le Thread 1 est allé plus loin et a déjà affecté la valeur 2, qui peut donc aussi être affichée.
En revanche, la valeur 0 a déjà été remplacée par 1 lorsque regarde devient true, et donc « ne peut pas » être affichée.
[^] # Re: Pas compris
Posté par Yves (site web personnel) . En réponse au journal Barrières mémoire et buffers circulaires - Un résultat inattendu. Évalué à 3.
Au niveau du Thread 2,
while(!regarde) {}ne fait rien tant queregardeest false, et reboucle. On ne peut sortir de là que lorsqueregardeest true.Du coup, quand on passe à la ligne suivante dans le Thread 2 (
print(valeur);), le Thread 1 a déjà affecté la valeur1, qui peut être affichée. Mais potentiellement, le Thread 1 est allé plus loin et a déjà affecté la valeur2, qui peut donc aussi être affichée.En revanche, la valeur
0a déjà été remplacée par1lorsqueregardedevient true, et donc « ne peut pas » être affichée.