1

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

因为像 Add、Remove 等方法必须更新.Count值。也许我应该让它成为惰性属性?

4

4 回答 4

2

您可能需要考虑使用 Interlocked 类中的函数,至少在您给出的示例中是这样。

于 2009-05-04T23:30:19.230 回答
2

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

于 2009-05-04T23:30:33.630 回答
1

但是有一个静态变量会影响多线程吗?

当然!共享状态受定义和多线程的影响。

因为像 Add、Remove 等方法必须更新 .Count 值。也许我应该让它成为惰性属性?

最好使用一个执行原子添加的类(如java中的AtomicInteger)以避免锁定:看看这里

于 2009-05-04T23:37:49.943 回答
0

是的,每当您在多线程环境中更新共享变量时,您只需将这些更新包装在锁中即可。

于 2009-05-04T23:28:07.923 回答