gpt4 book ai didi

c# - 在多线程应用程序中查找/避免共享数据的规则

转载 作者:行者123 更新时间:2023-11-30 22:50:24 25 4
gpt4 key购买 nike

你好,

众所周知,开发多线程应用程序是一件困难的事情。恕我直言,尤其是何时锁定以及锁定什么并不是那么明显。通常我正在查看一个方法/类,我必须问自己,如果我共享一些数据,这些数据可以被多个线程修改。当我不确定它在整个代码块上以 lock() 结束时。

那么我想知道的是:您对识别共享数据的模式/规则等有什么建议吗?或确保您的代码是线程安全的技术。

例如:

  • 静态方法不应修改类字段。 (除非他们锁定字段。)
  • 不应“直接”传递方法的引用类型参数。总是传递一个克隆。

顺便说一句:

微软研究院正在研究 CHESS .在并发程序中查找和重现 Heisenbug 的工具。我希望它和 PLINQ 能够改进并发程序的开发。

最佳答案

只要有可能,一开始就让你的类型不可变。那么就不需要克隆了。如果您需要“更改”对象的内容,请让该方法返回一个新对象 - 就像 String.Replace 等一样。

这基本上是函数式编程风格,而且很可爱。不幸的是,我们(目前)没有在 .NET 框架中内置不可变集合,尽管有第三方集合,including one by our own JaredPar .

关于c# - 在多线程应用程序中查找/避免共享数据的规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/618216/

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