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 がリソースを節約するよりも、マルチスレッド環境での安全性を確保するかどうかです。