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

1.10 / 6:

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

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

1

Решение

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

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

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

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

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

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]