У меня есть класс, который разработан в основном как класс POCO, при этом различные потоки и задачи могут считывать его значения, и только другие только периодически обновляют эти значения. Это кажется идеальным сценарием для 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; }
... было бы достаточно?
Потому что Тип это bool, это безопасно? если так, когда это становится небезопасным?
байт? Int? DateTime?
1012 * редактировать *
Моя основная архитектура состоит в том, чтобы иметь это состояние хранилища классов. Может быть, есть одна служба, отвечающая за запись в этот класс. Все остальные классы могут читать и выполнять свою логику на основе этих данных состояния. Я сделаю все возможное, чтобы убедиться, что все данные согласованы, но, как указано ниже, моей главной заботой была атомарность и разделение данных.
Заключение
Спасибо всем за ответ, все были ценными. Моей главной заботой была атомарность операций записи / чтения (то есть, беспокойство по поводу расщепления). Для платформы .NET, если рассматриваемая переменная является встроенным типом значения, который меньше 4 байтов, тогда чтение и запись являются атомарными (например, short и int в порядке, long и double - нет).