Нет такого понятия, как атомный тип . Только операции могут быть атомарными.
Чтение и запись типа данных, который вписывается в одно слово (int
на 32-разрядном процессоре, long
на 64-разрядном процессоре), технически "атомарен", но дрожание и / или процессор могут решите изменить порядок команд и, таким образом, создать непредвиденные условия гонки, поэтому вам нужно либо сериализовать доступ с lock
, использовать класс Interlocked
для записи (и в некоторых случаях чтения), либо объявить переменную volatile
.
Краткий ответ: если два разных потока могут обращаться к одному и тому же полю / переменной и по крайней мере один из них будет писать, вам нужно использовать какой-то тип блокировки. Для примитивных типов это, как правило, класс Interlocked
.