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

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

有帮助吗?

解决方案

如果您只是在做一个计数器,那么互锁操作也可能是一个选项而不是锁定。 MSDN在引用计数的上下文中有一个这个很好的例子

其他提示

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

  

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

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

  

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

最好使用进行原子添加的类(如 java中的AtomicInteger in为了避免锁定:看看这里

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

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