Нужен ли доступ к неизменяемому объекту через барьер памяти в C #? - PullRequest
5 голосов
/ 14 марта 2011

Когда неизменный объект добавляется в один поток и передается во второй поток (скажем, как поле общего объекта), не должен ли второй поток синхронизироваться?

Thread1:
=========
 x = new SomeObject()

Thread2
=========
if (x != null)
 x.DoSomething()

Должен ли быть барьер памяти перед x.DoSomething ()? возможно ли, что назначение x в первом потоке никогда не будет видно второму потоку? Что такое шаблон безопасной публикации для .NET?

1 Ответ

2 голосов
/ 14 марта 2011

Да, возможно, что поток 2 никогда не увидит ненулевое значение x с кодом, который вы написали (в зависимости от того, как код оптимизирован).Вам не нужен явный барьер памяти.Просто объявите х как изменчивый.

...