Здравствуйте, DTF, Вы писали:
DTF>Здравствуйте, watchmaker, Вы писали:
W>>Увидят — это факт.
DTF>Т.е. изменение (атомарной) переменной все потоки видят одновременно независимо от memory_order?
Не обязательно одновременно. Просто видят. Когда-нибудь.
Главное что операции с атомарной переменной происходят всегда атомарно.
DTF>А почему тогда происходит так, что разные потоки могут видеть изменение значений переменных в разном порядке?
Потому что процессор так может работать. Либо быстро, но с меньшими гарантиями, либо медленнее, но с большим соблюдением порядка.
Задание memory order как раз и позволяет программисту выбрать требуемый уровень ограничений на порядок видимости.
Например, если ты отпустил lock с memory_order_relaxed, то не факт, что изменения сделанные под lock'ом доедут до других потоков к моменту как они его захватят.
Если же отпускать lock с memory_order_release, то гарантируется, что сначала будут зафиксированы все изменения и лишь затем lock будет освобождён.