我有一个主要设计为POCO类的类,各种线程和任务可以读取其值,只有其他只偶尔更新这些值。这似乎是ReaderWriterLockSlim的理想场景。
问题是,在类中,如果属性需要是线程安全的,如果属性是bool,那是否有点过分?如果它是一个int会发生什么?约会时间?
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是bool,它安全吗?如果是的话,什么时候变得不安全? 字节?诠释?约会时间?
编辑
我的基本架构是具有此类存储状态。也许有一个服务负责对这个类进行写操作。所有其他类都可以根据此状态数据读取和执行其逻辑。我将尽力确保所有数据一致,但如下所述,我主要担心的是数据的原子性和危险性。
结论
感谢大家的回复,一切都很有价值。我主要担心的是写入/读取的原子性(即担心松懈)。对于.NET平台,如果有问题的变量是一个小于4个字节的内置值类型,则读取和写入是原子的(例如,short和int很好,long和double不是)。