Предположим, что у меня есть нелетучее поле int и поток, который Interlocked.Increment
он. Может ли другой поток безопасно читать это напрямую или нужно также блокировать чтение?
Ранее я думал, что мне нужно использовать взаимосвязанное чтение, чтобы гарантировать, что я вижу текущее значение, поскольку, в конце концов, поле не изменчиво. Я использовал Interlocked.CompareExchange(int, 0, 0)
для достижения этого.
Однако я наткнулся на этот ответ, который говорит о том, что на самом деле простые чтения всегда будут видеть текущую версию значения Interlocked.Increment
ed, а так как int reading уже атомный, нет необходимости делать что-то особенное. Я также нашел запрос, в котором Microsoft отклоняет запрос Interlocked.Read(ref int), что также указывает на то, что это полностью избыточно.
Итак, могу ли я действительно прочитать самое текущее значение такого поля int
без Interlocked
?