Этот отрывок о памяти, которая меняется, а не о памяти, которая остается постоянной. Обмен констант между потоками - это нормально.
Если у вас есть несколько процессоров, каждый из которых обновляет одно и то же место, они должны постоянно посылать свои изменения назад и вперед друг другу. Это приводит к конфликту за «владение» определенным фрагментом памяти.
Часто право собственности не является явным. Но когда один процессор сообщает всем остальным, что определенная строка кэша должна быть аннулирована, потому что она просто что-то там изменила, тогда все остальные процессоры должны исключить значение из своих кэшей. Это приводит к тому, что процессор последний раз модифицирует часть памяти, эффективно «владея» строкой кеша, в которой он находился.
И, опять же, это проблема только того, что изменилось.
Кроме того, представление памяти и кеша, которое я вам дал, довольно упрощенное. Пожалуйста, не используйте его, рассуждая о безопасности потоков определенного фрагмента кода. Достаточно понять, почему несколько процессоров, обновляющих один и тот же кусок памяти, вредно для вашего кэша, но недостаточно для понимания того, какая версия процессора в определенной области памяти используется другими.
Местоположение памяти, которое не изменяется в течение времени жизни потока, используемого несколькими потоками, приведет к тому, что это место памяти появится в нескольких кэшах ЦП. Но это не проблема. Также это не проблема для конкретной области памяти, которая не изменяется, чтобы быть сохраненной в кэшах L2 и L3, которые являются общими для процессоров.