Re: Прошу пояснений по синхронизации acquire-release
От: watchmaker  
Дата: 08.02.17 17:45
Оценка: +1
Здравствуйте, DTF, Вы писали:


DTF>А если в test_and_set указать флаг memory_order_acq_rel, то всё будет работать правильно.

Если под правильностью понимать, что lock захватить может одновременно не более одного потока, то будет работать правильно при любых допустимых параметрах в test_and_set и clear.

DTF>Правильно ли я понимаю, что при такой реализации его одновременно могут захватить несколько потоков,

Нет, не могут.

DTF>т.к. если один установил значение c memory_order_acquire, то не факт, что остальные потоки это увидят.

Увидят — это факт.
memory_order на это не влияет. Он нужен вообще не для самой установки atomic_flag, а чтобы показать как с этой установкой должны взаимодействовать другие операции чтения и записи в память. В твоём коде таких операций вообще нет — тут просто нечему ломаться.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.