Нет.
Вам необходимо синхронизировать доступ к этим переменным, используя мьютексы или делая их атомами c.
Нет исключения для того, когда записывается то же самое значение. Вы не знаете, какие шаги предпринимаются при написании этого значения (что является основной практической задачей), а также не соответствует стандарту, из-за которого код имеет неопределенное поведение ... что означает, что ваш компилятор может просто создать беспорядок в вашей программе (и это реальная проблема, которую вам следует избегать).
Кто-то придет и скажет вам, что такая-то архитектура гарантирует, что atomi c пишет в переменные такого размера. Но это не меняет аспект UB.
Вы ищете следующие отрывки:
[intro.races/2]
: две оценки выражений конфликт , если один из них изменяет ячейку памяти ([intro.memory]), а другой читает или изменяет ту же ячейку памяти.
[intro.races/21]
: […] Выполнение программы содержит гонку данных , если она содержит два потенциально одновременных конфликтующих действия, […]. Любая такая гонка данных приводит к неопределенному поведению.
… и окружающей его формулировке. Этот раздел на самом деле довольно эзотерический c, но вам не нужно его анализировать, так как это классическая c гонка данных из учебников, о которой вы можете прочитать в любой книге по программированию.