Sim*_*One 7 c# variables multithreading locking
我是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;
}
}
Run Code Online (Sandbox Code Playgroud)
如果someMethod()且MethodA()可以在单独的线程中处于活动状态,则MethodA()可以将if语句评估为true; 但在它设置之前myVar = 0,someMethod()设置myVar = 0为不正确设置myVar为0 MethodA()!!
基本上,我如何锁定myVar:
lock{}对myVar"财产(设置,获取) Interlock(Interlock虽然我没有经验)?aqw*_*ert 17
您应该创建一个允许锁定的私有对象:
private readonly object _locker = new object();
Run Code Online (Sandbox Code Playgroud)
然后在你的属性get/set方法中,锁定它:
get { lock (_locker) { return this.myVar; } }
set { lock (_locker) { this.myVar = value; } }
Run Code Online (Sandbox Code Playgroud)
确保您的方法也使用锁:
public void MethodA()
{
lock(_locker)
{
if(myVar == 1)
myVar = 0;
}
}
Run Code Online (Sandbox Code Playgroud)
我就是这样做的。
static readonly object _myVar_Lock = new object();
private int _myVar = 0;
public int myVar
{
get { lock (_myVar_Lock) { return this._myVar; } }
set { lock (_myVar_Lock) { this._myVar = value; } }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16422 次 |
| 最近记录: |