я читал эту статью MSDN о синхронизации потоков без блокировки ]. В статье, кажется, делается вывод, что если вы вводите блокировку перед доступом к общим переменным, эти переменные будут актуальными (по крайней мере, в .Net 2.0).
Я подумал, как это было возможно? lock в .Net - это просто произвольный объект, который все потоки проверяют перед доступом к памяти, но сама блокировка не знает, какие ячейки памяти используются.
Если у меня есть поток, обновляющий переменную, или даже весь фрагмент памяти. Каким образом эти обновления гарантированно будут сброшены из кешей ЦП при входе / выходе из блокировки? ВСЕ ли обращения к памяти эффективно становятся энергозависимыми внутри блокировки?