实例构造函数设置静态成员

实例构造函数设置静态成员

本文介绍了实例构造函数设置静态成员,它是线程安全的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我重新分解了一些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;
        }
    }
}

请确认

  1. 在实例构造函数是线程安全的。
  2. 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

这篇关于实例构造函数设置静态成员,它是线程安全的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-15 18:01