Известно, что ссылка занимает 4 байта памяти в 32-битном процессоре и 8 байтов - в 64-битном процессоре. Таким образом, процессоры гарантируют, что одиночные чтения и записи в память с шагом натурального размера слова машины будут выполняться атомарно. С другой стороны, в классе Interlocked есть 2 метода:
public static int Exchange(
ref int location1,
int value
)
и
public static T Exchange<T>(
ref T location1,
T value
)
where T : class
Итак, возникает вопрос, почему Interlocked.Exchange необходим для Int32 и для ссылочных типов? Нельзя ли это сделать безопасно, просто используя простое назначение, потому что оно является атомарным?