У меня есть класс, который разработан в основном как класс POCO, при этом различные Threads и Tasks могут читать его значения, а только другие только изредка обновляют эти значения. Это, кажется, идеальный сценарий для ReaderWriterLockSlim.
Вопрос в классе, если свойство, которое должно быть потокобезопасным, если свойство является bool, является ли это излишним? что произойдет, если это int? DateTime?
public class MyClass
{
private bool _theValue = false;
private ReaderWriterLockSlim _theValueLock = new ReaderWriterLockSlim();
public bool TheValue
{
get
{
bool returnVal = false;
try
{
_theValueLock.EnterReadLock();
returnVal = _theValue;
}
finally
{ _theValueLock.ExitReadLock(); }
return returnVal;
}
set
{
try
{
_theValueLock.EnterWriteLock();
_theValue = value;
}
finally
{ _theValueLock.ExitWriteLock(); }
}
}
}
Все это переполнение кода и простой...
public bool TheValue { get; set; }
... было бы достаточно? Потому что Type is bool, безопасно ли это? если да, когда это становится небезопасным? байт? Int? DateTime?
изменить
Моя основная архитектура - это состояние хранилища этого класса. Может быть, есть одна служба, отвечающая за запись в этот класс. Все остальные классы могут читать и выполнять свою логику на основе данных состояния. Я сделаю все возможное, чтобы убедиться, что все данные согласованы, но, как указано ниже, моя главная проблема заключалась в атомарности и расщеплении данных.
Заключение
Спасибо всем за их ответ, все были ценны. Моя главная забота заключалась в атомарности писем/чтений (т.е. Беспокоились о расщеплении). Для платформы .NET, если рассматриваемая переменная представляет собой встроенный тип значения, который меньше 4 байтов, тогда чтение и запись являются атомарными (например, short и int являются точными, длинными и двойными не являются).