【发布时间】:2014-02-12 09:36:05
【问题描述】:
我有一个带有支持字段的属性,我想使线程安全(获取和设置)。 get和set方法除了设置和返回没有任何逻辑。
我认为有两种方法可以封装属性 self 中的逻辑(易失性和锁定)。 我对两者的理解是正确的还是我犯了任何错误?
以下是我的例子:
public class ThreadSafeClass
{
// 1. Volatile Example:
private volatile int _processState_1;
public int ProcessState_1
{
get { return _processState_1; }
set { _processState_1 = value; }
}
// 2. Locking Example:
private readonly object _processState_2Lock = new object();
private int _processState_2;
public int ProcessState_2
{
get
{
lock (_processState_2Lock)
{
return _processState_2;
}
}
set
{
lock (_processState_2Lock)
{
_processState_2 = value;
}
}
}
}
【问题讨论】:
-
您的理解似乎肯定是错误的(或至少不完整),但很难提供具体的回应,因为那只是一堆代码。您根本没有提及您的理解到底是什么。另外,请注意“线程安全”没有单一定义,因此您自己的定义也不清楚。
标签: c# .net multithreading locking volatile