我正在重新考虑一些代码,并且想知道lock
在实例构造函数中使用a .
public class MyClass { private static Int32 counter = 0; private Int32 myCount; public MyClass() { lock(this) { counter++; myCount = counter; } } }
请确认
实例构造函数是线程安全的.
lock语句阻止访问该代码块,而不是静态"计数器"成员.
如果原始程序员的意图是让每个实例知道它的'count',我将如何同步访问'counter'成员以确保另一个线程不是新的a MyClass
并在此设置之前更改计数计数?
仅供参考 - 此课程不是单身.实例必须只知道它们的编号.
如果你只是增加一个数字,那么就有一个特殊的类(Interlocked)就是这样...
http://msdn.microsoft.com/en-us/library/system.threading.interlocked.increment.aspx
Interlocked.Increment方法
增加指定的变量并将结果存储为原子操作.
System.Threading.Interlocked.Increment(myField);
有关线程最佳实践的更多信息......
http://msdn.microsoft.com/en-us/library/1c9txz50.aspx