Я читал книгу Джо Даффи о параллельном программировании. У меня есть своего рода академический вопрос о запретной резьбе.
Во-первых: Я знаю, что беззаконная нить чревата опасностью (если вы мне не верите, прочитайте разделы в книге о модели памяти)
Тем не менее, у меня есть вопрос: предположим, что у меня есть класс с свойством int на нем.
Значение, на которое ссылается это свойство, будет читаться очень часто несколькими потоками
Редко бывает, что значение изменится, и когда это произойдет, это будет единственный поток, который изменит его.
Если он изменится, а другая операция, которая его использует, находится в полете, никто не потеряет палец (первое, что его использует, это скопировать его в локальную переменную)
Я мог бы использовать блокировки (или readwriterlockslim, чтобы поддерживать чтение одновременно). Я могу отметить переменную volatile (много примеров, где это сделано)
Однако даже волатильность может нанести удар производительности.
Что делать, если я использую VolatileWrite, когда он изменяется, и оставьте нормальный доступ для чтения. Что-то вроде этого:
public class MyClass
{
private int _TheProperty;
internal int TheProperty
{
get { return _TheProperty; }
set { System.Threading.Thread.VolatileWrite(ref _TheProperty, value); }
}
}
Я не думаю, что я когда-нибудь попытаюсь это сделать в реальной жизни, но мне интересно узнать об этом (более того, как контрольный пункт, понимаю ли я модель памяти, которую я читал).