Да, на x86 и x86-64, если читаемое значение выровнено правильно.32-битные int
с, они должны быть выровнены по 4-байтовой границе, чтобы при чтении или записи доступ был атомарный , что почти всегда будет иметь местоесли вы не сделаете все возможное, чтобы создать невыровненные int
s (скажем, используя упакованную структуру или выполнив арифметику приведения / указателя с байтовыми буферами).
Возможно, вы также захотите объявить свою переменную как volatile
, чтобы компилятор генерировал код, который будет повторно извлекать переменную из памяти при каждом обращении к ней.Это предотвратит его оптимизацию, такую как кэширование в регистре, когда он может быть изменен другим потоком.