• [^] # Re: Ai-je bien compris ?

    Posté par (site web personnel) . En réponse au journal Performances des processeurs Intel et optimisation. Évalué à 2.

    Ton programme est en effet une « undefined behaviour » d'après le standard. Je cite:

    [C++11] §1.10 21
    The execution of a program contains a data race if it contains two conflicting actions in different threads, at least one of which is not atomic, and neither happens before the other. Any such data race results in undefined behavior.

    !f et f = 1 sont dans différent thread, sont deux opérations non atomic, conflictuelles et il n'y a pas de « happens before » selon les définitions données dans la même section.
    Le compilateur est donc libre de faire ce qu'il veut.

    Si f était de type std::atomic<int> alors ce serait bon.