[英]Thread safety SingletonHolder performance?
在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;
}
问题在于此方法始终使用互斥量来确保在多线程环境中创建的对象不超过一个。 我认为在第一次调用该方法时进行同步是适当的。 如果之后进行同步,将浪费资源。 我知道双重检查锁定可以解决此问题,但可能会损坏 。
我的问题是POCO是否宁愿确保多线程环境中的安全性而不是节省资源?
遵循您的想法,没有什么可以阻止您使用它,例如:
MySingleton* s = mySingletonHolder.get();
s->doSomething(); //no locking
...
s->doSomething(); //no locking
显然,如果始终使用它,则:
mySingletonHolder.get()->doSomthing();
...
mySingletonHolder.get()->doSomthing();
您将始终拥有锁开销。
顺便说一句,如果您在多线程方案中使用单例实例,则应确保对doSomething()的调用是线程安全的。 只做mySingletonHolder.get()-> doSomthing(); 不保证您。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.