C++ 螺纹安全单音夹性能?

C++ 螺纹安全单音夹性能?,c++,multithreading,poco,C++,Multithreading,Poco,在POCO框架中,SingletonHodler是一个用于管理sigleton对象的模板类。获取singleton对象的方法是: S* get() /// Returns a pointer to the singleton object /// hold by the SingletonHolder. The first call /// to get will create the singleton. { FastMutex::ScopedLock

在POCO框架中,SingletonHodler是一个用于管理sigleton对象的模板类。获取singleton对象的方法是:

    S* get()
    /// Returns a pointer to the singleton object
    /// hold by the SingletonHolder. The first call
    /// to get will create the singleton.
{
    FastMutex::ScopedLock lock(_m);
    if (!_pS) _pS = new S;
    return _pS;
}
问题是,此方法始终使用互斥来确保在多线程环境中创建的单例对象不超过一个。我认为在第一次调用该方法时进行同步是合适的。如果我们在此之后进行同步,将浪费资源。我知道可以解决这个问题,但可能是


我的问题是,POCO是否宁愿确保多线程环境中的安全,也不愿节省资源

遵循你的想法没有什么能阻止你使用它,比如:

   MySingleton* s = mySingletonHolder.get();
   s->doSomething(); //no locking
   ...
   s->doSomething(); //no locking
显然,如果你总是这样使用它:

   mySingletonHolder.get()->doSomthing();
   ...
   mySingletonHolder.get()->doSomthing();
你的头上总是有锁


顺便说一句,如果您在多线程场景中使用单实例,您应该保证对doSomething()的调用是线程安全的。只执行mySingletonHolder.get()->doSomthing()不向您保证。

不要使用单例,您将永远不会遇到任何与单例相关的问题。任何关于某个构造的性能的问题都应该用“您是否为您的用例测量了它?”来回答。有你?