单例上的C ++

时间:2013-05-20 15:17:54

标签: c++ multithreading singleton mutex

我有一个单例类,我确信单例的第一次调用只由一个线程完成。我已经实现了懒惰初始化的单例。

class MySingleton : private boost::noncopyable {
public:

    /** singleton access. */
    static MySingleton & instance()
    {
        static MySingleton myInstance;
        return myInstance;
    }

    void f1();
    void f2();
    void f3();
    void f4();

private:

    MySingleton();

};

现在我有另一个工厂类负责在单个线程环境中创建所有单例。 可以从多个线程使用单例,并且保护方法免受互斥。

第一个问题

这种方法是否可以接受?

第二个问题

我有一个必须是线程安全的复杂类。
这个班级必须是单身人士。如何调用类的不同方法是线程安全的。例如。

{ 
    MySingletonLock lock;
    // Other thread must wait here.
    MySingleton::instance().f1();
    MySingleton::instance().f3();
}

我怎么能得到这个?

1 个答案:

答案 0 :(得分:1)

第二个问题的答案:

class MyProtectedSingleton: public MySingleton
{
public:
   void f1()
   {
       MySingletonLock lock;
            // Other thread must wait here.
       MySingleton::instance().f1();    
   }

  void f2()
  {
      MySingletonLock lock;
        // Other thread must wait here.
      MySingleton::instance().f2();    
  }
};

通过MyProtectedSingleton中的包装器调用f1,f2等。