在 POCO 框架中,SingletonHodler 是一个用于管理单例对象的模板类。获取单例对象的方法是:
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 是否宁愿确保多线程环境中的安全而不是节省资源?