Ответ 1
Interlocked.Exchange использует инструкцию процессора, которая гарантирует атомную операцию.
Volatile.Write делает то же самое, но также включает в себя работу с защитой памяти. Я думаю, что Microsoft добавила Volatile.Write на DotNet 4.5 из-за поддержки процессоров ARM в Windows 8. Процессоры Intel и ARM отличаются от переупорядочения памяти.
В Intel у вас есть гарантия, что операции доступа к памяти будут выполняться в том же порядке, в каком они были выпущены, или, по крайней мере, что операция записи не будет переупорядочена.
В Руководстве разработчиков программного обеспечения Intel® 64 и IA-32, глава 8:
8.2.2 Заказ памяти в P6 и более новых семействах процессоров Семейство Intel Core 2 Duo, Intel Atom, Intel Core Duo, Pentium 4 и P6 процессоры также используют упорядоченную по процессору модель памяти, которая может далее определяется как "запись, упорядоченная с пересылкой буфера хранилища". Эта модель может быть охарактеризована следующим образом.
В ARM у вас нет такой гарантии, поэтому необходим барьер памяти. Блог ARM, объясняющий это, можно найти здесь: http://blogs.arm.com/software-enablement/594-memory-access-ordering-part-3-memory-access-ordering-in-the-arm-architecture/
В вашем примере, поскольку операция с double не гарантируется быть атомарной, я бы рекомендовал блокировку для доступа к ней. Помните, что при чтении и настройке значения необходимо использовать блокировку для обеих частей кода.
Более полный пример будет лучше ответить на ваш вопрос, так как неясно, что происходит после того, как эти значения установлены. Для вектора, если у вас больше читателей, чем писателей, рассмотрите использование объекта ReaderWriterLockSlim: http://msdn.microsoft.com/en-us/library/system.threading.readerwriterlockslim.aspx
Количество потоков и частота чтения/записи могут значительно изменить стратегию блокировки.