我是C#新手,想问一下我在MULTI THREADS中是否有这种情况(伪代码):
public class ClassA
{
ClassB c = new ClassB();
public void someMethod()
{
c.myVar = 1;
// Some other stuff
c.myVar = 0;
}
}
public class ClassB
{
internal int myVar;
public void MethodA()
{
if(myVar = 1)
myVar = 0;
}
}
如果 someMethod()
和 MethodA()
可以在不同的线程中激活,那么 MethodA()
可以评估 if 语句为真;但在它设置 myVar = 0
之前,someMethod()
设置了 myVar = 0
使得设置 myVar
不正确在 MethodA()
中为 0!!
基本上,我如何锁定 myVar
:
- 我可以
锁定{}
myVar
的属性(设置、获取) - 我是否需要使用
Interlock
(虽然我还没有使用过Interlock
)?
最佳答案
您应该创建一个允许锁定的私有(private)对象:
private readonly object _locker = new object();
然后在您的属性获取/设置方法中,锁定它:
get { lock (_locker) { return this.myVar; } }
set { lock (_locker) { this.myVar = value; } }
确保您的方法也使用锁:
public void MethodA()
{
lock(_locker)
{
if(myVar == 1)
myVar = 0;
}
}
关于c# - 在多个线程中锁定一个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4081986/