После прочтения CLR Рихтера через C #, некоторые потоки на SO и habr , и вики на MSI / MESI / MOESI / etc., Я все еще не понимаю:
Зачем еще нужно Thread.MemoryBarrier
или volatile
, если процессоры уже имеют протоколы когерентности кэша?Означает ли это, что любая операция чтения / записи над кэшированной общей переменной вызывает синхронизацию ее значения между кэшами?
Если нет, то Interlocked
помогает обеспечить согласованность кэша?
EDIT : Причина в том, что я работаю над приложением, предназначенным для работы с кучей фоновых потоков, которые должны безопасно завершаться при обновлении какого-либо флага, но если я правильно понимаю, я должен окружить флаг, прочитанный MemoryBarrier
/ Interlocked
заявление.
Заранее спасибо.