gpt4 book ai didi

c# - 在多个线程中锁定一个变量

转载 作者:太空狗 更新时间:2023-10-29 19:53:18 25 4
gpt4 key购买 nike

我是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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com