题
我正在设计一些不可变的类,但我必须有一些变量,比如说 .Count
来获得实例的总数。但是静态变量是否会影响多线程?
因为Add,Remove等方法必须更新 .Count
值。也许我应该把它变成懒惰的财产?
解决方案
如果您只是在做一个计数器,那么互锁操作也可能是一个选项而不是锁定。 MSDN在引用计数的上下文中有一个这个很好的例子
其他提示
您可能需要考虑使用Interlocked类中的函数,至少在您提供的示例中。
但是静态变量是否会影响多线程?
肯定!通过多线程,通过定义来影响共享状态。
因为Add,Remove等方法必须更新.Count值。也许我应该把它变成懒惰的财产?
最好使用进行原子添加的类(如 java中的AtomicInteger in为了避免锁定:看看这里
是的,无论何时在多线程环境中更新共享变量,您都需要将这些更新包装在锁中。
不隶属于 StackOverflow