c# - 锁定属性,好方法?

标签 c# winforms multithreading

在我的多线程应用程序中,我使用了一些可以同时被多个实例更改的变量。这很奇怪,但它工作正常,没有任何问题……但我当然需要让它成为线程安全的。我刚开始使用锁,所以我会感谢您的建议:

当客户端连接时,会创建类 Client,其中每个客户端都有自己的“A”变量。

有时,客户端调用这样的方法:

Client selectedClient SelectOtherClientClassByID(sentID);

selectedClient.A=5;

直到现在,即使 5 个类同时执行(线程池)也没有问题,但我在考虑向 A 属性添加锁怎么样?

喜欢:

A {
    get { return mA; }
    set {
        // use lock here for settting A to some value
    }    
}

可以吗?

最佳答案

你需要在 get 和 set 中使用锁。这个锁必须是同一个对象。例如:

private object mylock = new object();

public int A {

  get {
    int result;
    lock(mylock) {
    result = mA; 
    }
    return result;
  } 

  set { 
     lock(mylock) { 
        mA = value; 
     }
  }
}

关于c# - 锁定属性,好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1612406/

相关文章:

c# - 在 Entity Framework 中设置默认值 - 数据库优先

c# - 为什么 Type.GetFields() 不返回基类中的支持字段?

c# - 不使用闰年函数计算闰年

java - HikariCP - 负载测试使性能下降到停止

c# - 具有嵌套类型的 XAML DataContext DesignInstance

c# - 如何维护一些基本相同但基于相同代码库的软件产品?

c# - 如何选择一个圆圈,将其拖放到 Windows 窗体中的另一个位置?

windows - 2D XNA 的继承者/替代品?

c++ - QT5中实现原子队列

c++ - 将项目添加到队列时运行线程