作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我是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/
我是一名优秀的程序员,十分优秀!