我正在设计一些不可变的类,但我必须有一些变量,比如说.Count
来计算实例的总数。但是静态变量是否会影响多线程?
因为Add,Remove等方法必须更新.Count
值。也许我应该把它变成懒惰的财产?
答案 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)
是的,无论何时在多线程环境中更新共享变量,您都需要将这些更新包装在锁中。