Имеют ли неатомарные объекты одинаковый порядок модификации во всех потоках? (при отсутствии данных гонок)

1.10/6:

Все модификации конкретного атомного объекта M происходят в определенном общем порядке, называемом порядком модификации M.

Неатомарные объекты также имеют одинаковый порядок модификации во всех потоках? Меня интересуют правильно синхронизированные случаи (в отсутствии гонок данных и т. Д.).

1 ответ

Решение

Вы должны иметь синхронизацию между всеми участвующими потоками.

Если у вас есть один (или более) поток (-ы), обновляющий неатомарное значение (с любым количеством синхронизирующих операций в их группе) и другой поток, считывающий это значение (без синхронизации с какими-либо потоками средства обновления), вам даже не гарантируется, что Вы прочитаете одно из значений, сохраненных другими потоками.

Как правило, если один поток обновляет неатомарную переменную, а другой обращается к ней (обновляет или читает) без надлежащей синхронизации между этими двумя операциями, возникает гонка данных. Гонка данных вызывает неопределенное поведение.

Если вы "правильно синхронизируете" доступы к неатомарным переменным, между любыми изменениями и любым доступом в другом (или, конечно, том же) потоке возникнет взаимосвязь " происходит до". Это включает в себя отношения между любыми двумя модификациями.

Это происходит до того, как отношения действительны во всех потоках и вызывают общий порядок между модификациями. Итак, да: правильно синхронизированное использование дает вам полный порядок изменения (который даже одинаков для всех переменных, синхронизированных с использованием одинаковых операций синхронизации).

Другие вопросы по тегам