不变性和静态变量

时间:2009-05-04 23:23:03

标签: c# .net parallel-processing

我正在设计一些不可变的类,但我必须有一些变量,比如说.Count来计算实例的总数。但是静态变量是否会影响多线程?

因为Add,Remove等方法必须更新.Count值。也许我应该把它变成懒惰的财产?

4 个答案:

答案 0 :(得分:2)

您可能需要考虑使用Interlocked类中的函数,至少在您提供的示例中。

答案 1 :(得分:2)

如果你只是做一个计数器,联锁操作也可以是一个选项,而不是一个锁。 MSDN在引用计数的上下文中有nice example of this

答案 2 :(得分:1)

  

但是静态变量是否会影响多线程?

肯定!通过多线程,通过定义来影响共享状态。

  

因为Add,Remove等方法必须更新.Count值。也许我应该把它变成懒惰的财产?

最好使用does an atomic add的类(如java中的AtomicInteger)以避免锁定:take a look here

答案 3 :(得分:0)

是的,无论何时在多线程环境中更新共享变量,您都需要将这些更新包装在锁中。