Hy,

因为我们都知道,发展一个多的应用是一个很难的事情。特别点的时候和什么要锁是不那么明显恕我直言。通常我在寻找一个方法/类和我必须问自己,如果我分享一些数据,这些数据可以修改通过多线程。而当我不确定它结束在一个锁()通过一个整体的代码块。

所以我想知道:你有建议的模式/规则等。确定共同的数据?或技术来确保你的代码线的安全。

E.g.:

  • 静态的方法不应该修改类领域。(除非他们锁的领域。)
  • 参考型会的参数的方法不应该是通过"直接".总是通过克隆。

顺便说一句:

Microsoft的研究工作上 国际象棋的.一个工具,用于查找和再现Heisenbugs在并行的程序。我希望这并PLINQ将使提高发展的并行程序。

有帮助吗?

解决方案

尽可能让你的类型不变的开始。然后就没有必要的克隆。如果你需要"更改"的内容的对象,使法返回一个新的对象,而不是的-就像 String.Replace 等等。

这基本上是功能的程式,并且它是可爱的。不幸的是,我们不要(当前)具有不可改变的集合建成的。净框架,althoughthere第三方的周围, 其中包括一个由我们自己的JaredPar.

其他提示

封装的数据,一类是有用的,当使它线的安全。你得控制这些数据是如何进行访问,并可以使级负责同步,而不是具有代码的应用程序的努力同步正常。

还有,你有地方放一个私人可变的,你可以用作锁标识,这样就可以避免使用的数据本身作标识符锁。由具有私人变量专门锁识你删除的一个可能的来源的僵局。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top