【发布时间】:2013-10-29 07:07:37
【问题描述】:
在 POCO 框架中,SingletonHodler 是一个用于管理 sigleton 对象的模板类。获取单例对象的方法是:
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;
}
问题是这种方法总是使用互斥体来确保在多线程环境中创建的单例对象不超过一个。我认为在第一次调用方法时进行同步是合适的。如果我们在此之后进行同步,它将浪费资源。我知道Double check locking 可以解决这个问题,但它可能是broken。
我的问题是 POCO 是否宁愿确保多线程环境中的安全而不是节省资源?
【问题讨论】:
-
不要使用单例,你永远不会遇到与单例相关的任何问题。
-
任何关于某个构造的性能的问题都应始终以“您是否针对您的用例进行了测量?”来回答。你有吗?
标签: c++ multithreading poco