VolatileWrite
полезно только в том случае, если вы также используете VolatileRead
; модификатор volatile
проще в использовании, но мне интересно, не будет ли проще использовать синхронизацию - возможно, ReaderWriterLockSlim
(поскольку у вас много читателей).
Interlocked.Exchange<T>
просто выполняет получение и установку в качестве атомарной операции; он (AFAIK) не претендует на волатильность (действительно, компилятор даже сообщает вам, что поле volatile
не будет рассматриваться как volatile
при использовании в качестве аргумента ref
).
Измените, чтобы уточнить, что «он не (AFAIK) заявляет о волатильности» - поведение Interlocked
предсказуемо, и вы должны немедленно увидеть обновления в другом потоке , если они также используют Interlocked
; я хочу сказать, что если один поток использует Interlocked
, а другой использует volatile
(для разговора с одним и тем же полем), я не знаю никаких гарантий. Придерживайтесь одного или другого для доступа all .