c# - 如何锁定在多个线程中使用的变量

标签 c# multithreading locking

我在这里问了一个很糟糕的问题Lock on a variable in multiple threads所以为了清楚起见,我将在这里提问,希望我能正确提问。

classA
  creates instance of classB
  has methodA that can update & uses classB's myVar
  has methodB that can update & uses classB's myVar

classB
  has a variable myVar

methodA 和 methodB 都可以在单独的线程中运行(在主线程中调用)。我如何确保这是线程安全的?

最佳答案

使用lock关键字来保护可以被多个线程同时执行的代码。

public class ClassA
{
  private ClassB b = new ClassB();

  public void MethodA()
  {
    lock (b)
    {
      // Do anything you want with b here.
    }
  }

  public void MethodB()
  {
    lock (b)
    {
      // Do anything you want with b here.
    }
  }
}

请务必注意,lock 不会保护或锁定语句中使用的对象实例。相反,如果使用相同对象实例的另一个部分已经在执行,则该对象用作识别应阻止执行的代码部分的方法。换句话说,您可以在 lock 语句中使用您喜欢的任何对象实例,并且访问 ClassB 的成员仍然是安全的。

关于c# - 如何锁定在多个线程中使用的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4082339/

相关文章:

c# - 为什么 lock(this) thread.sleep 不适用于 ASP.NET 线程?

multithreading - 多线程代码——强制执行顺序

c# - 上传HTTP进度跟踪

c# - 如何动态更改上传文件夹

c# - 有没有办法在 .NET 中获取不同大小的 Windows 系统图标?

c# - 如何以随机间隔将执行挂起一段随机时间

c++ - pthread_spinlock 是否会导致从用户空间切换到内核空间

c# - 当编译时类型未知时,如何选择方法重载?

java - 具有原子替换的线程安全可序列化集合

java - JUnit 测试后多线程应用程序将无法运行