[英]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.