Re[3]: Прошу пояснений по синхронизации acquire-release
От: watchmaker  
Дата: 08.02.17 18:50
Оценка:
Здравствуйте, DTF, Вы писали:

DTF>Здравствуйте, watchmaker, Вы писали:


W>>Увидят — это факт.


DTF>Т.е. изменение (атомарной) переменной все потоки видят одновременно независимо от memory_order?

Не обязательно одновременно. Просто видят. Когда-нибудь.
Главное что операции с атомарной переменной происходят всегда атомарно.

DTF>А почему тогда происходит так, что разные потоки могут видеть изменение значений переменных в разном порядке?

Потому что процессор так может работать. Либо быстро, но с меньшими гарантиями, либо медленнее, но с большим соблюдением порядка.
Задание memory order как раз и позволяет программисту выбрать требуемый уровень ограничений на порядок видимости.

Например, если ты отпустил lock с memory_order_relaxed, то не факт, что изменения сделанные под lock'ом доедут до других потоков к моменту как они его захватят.
Если же отпускать lock с memory_order_release, то гарантируется, что сначала будут зафиксированы все изменения и лишь затем lock будет освобождён.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.