问题描述
我重新分解了一些code和我想知道使用了锁定
的实例构造函数。
I am re-factoring some code and am wondering about the use of a lock
in the instance constructor.
public class MyClass
{
private static Int32 counter = 0;
private Int32 myCount;
public MyClass()
{
lock(this)
{
counter++;
myCount = counter;
}
}
}
请确认
- 在实例构造函数是线程安全的。
- lock语句prevents获得了code座,而不是静态的柜台成员。
如果原来的程序员的意图是让每个实例,知道它的'伯爵',我将如何同步访问计数器成员,以确保另一个线程不new'ing一个 MyClass的
和改变算上这一项设置其计数之前?
If the intent of the original programmer were to have each instance know its 'count', how would I synchronize access to the 'counter' member to ensure that another thread isn't new'ing a MyClass
and changing the count before this one sets its count?
仅供参考 - 这个类是不是单身。实例必须仅仅是知道自己的号码。的
推荐答案
@ajmastrean
@ajmastrean
我不是说你应该使用Singleton模式本身,而是采用封装实例化过程中的方法。
I am not saying you should use the singleton pattern itself, but adopt its method of encapsulating the instantiation process.
即
- 请构造私有的。
- 创建返回类型的静态实例方法。
- 在静态实例方法,实例化之前使用lock关键字。
- 实例化的类型的新实例。
- 增加计数。
- 解锁并返回新的实例。
已发生的对我来说,如果你将如何知道什么时候计数已经下降的一个问题? ;)
One problem that has occurred to me, if how would you know when the count has gone down? ;)
关于它的思考,你可以添加code来调用另一个静态方法来减少计数器的析构函数:D
Thinking about it, you could add code to the destructor that calls another static method to decrement the counter :D
这篇关于实例构造函数设置静态成员,它是线程安全的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!