• [^] # Re: Pas compris

    Posté par (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 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.