我正在重构一些代码,并且想知道如何使用lock
在实例构造函数中。
public class MyClass {
private static Int32 counter = 0;
private Int32 myCount;
public MyClass() {
lock(this) {
counter++;
myCount = counter;
}
}
}
请确认
- 实例构造函数是线程安全的。
- lock 语句防止访问该代码块,而不是静态“计数器”成员。
如果原始程序员的意图是让每个实例知道其“计数”,那么我将如何同步对“计数器”成员的访问以确保另一个线程不会新建MyClass
并在设置计数之前更改计数?
仅供参考 - 这个类不是单例类。实例必须简单地知道它们的数量。
如果您只增加一个数字,则有一个特殊的类(Interlocked)用于此目的......
http://msdn.microsoft.com/en-us/library/system.threading.interlocked.increment.aspx http://msdn.microsoft.com/en-us/library/system.threading.interlocked.increment.aspx
互锁增量法
以原子操作的形式递增指定变量并存储结果。
System.Threading.Interlocked.Increment(myField);
有关线程最佳实践的更多信息...
http://msdn.microsoft.com/en-us/library/1c9txz50.aspx http://msdn.microsoft.com/en-us/library/1c9txz50.aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)