Я думаю, что вы спрашиваете, есть ли после того, как объект создан, конструктор возвращается и где-то хранится ссылка на него, есть ли вероятность того, что поток на другом процессоре все еще увидит старые данные. В качестве сценария предлагается возможность того, что строка кэша, содержащая данные экземпляра для объекта, ранее использовалась для какой-то другой цели.
При исключительно слабой модели памяти такое может быть возможно, но я ожидаю, что любая полезная модель памяти, даже относительно слабая, будет гарантировать, что разыменование неизменяемого объекта будет безопасным, даже если такая безопасность требует заполнения объектов достаточно, чтобы ни одна строка кэша не была разделена между экземплярами объекта (GC почти наверняка лишит законной силы все кэши, когда это будет сделано, но без такого дополнения было бы возможно, что неизменный объект, созданный ядром # 2, мог бы разделить строку кэша с объектом, который ядро № 1 ранее читал). Без этого уровня безопасности для написания надежного кода потребовалось бы столько блокировок и барьеров памяти, что было бы сложно написать многопроцессорный код, который был бы не медленнее однопроцессорного кода.
Популярные модели памяти x86 и x64 обеспечивают гарантию, которую вы ищете, и идут гораздо дальше. Процессоры координируют «владение» строками кэша; если несколько процессоров хотят прочитать одну и ту же строку кэша, они могут сделать это без помех. Когда процессор хочет записать строку кэша, он договаривается о владении другими процессорами. Как только право собственности приобретено, процессор выполнит запись. Другие процессоры не смогут читать или записывать строку кэша, пока процессор, которому принадлежит строка кэша, не откажется от нее. Обратите внимание, что если несколько процессоров хотят одновременно писать одну и ту же строку кэша, они, скорее всего, будут тратить большую часть своего времени на согласование владения строк кэша, а не на выполнение реальной работы, но семантическая корректность будет сохранена.