マルチスレッド環境ではほとんど作業を行っていません。したがって、以下のクラスの getInstance 関数がスレッドセーフかどうかを知る必要があります。シングルトンクラスは次のとおりです。
//Singleton class
class S {
// intentionally avoided pointer
static S singleObject;
// Private constructor
s ();
s (S &);
s& operator= (const s&);
public:
// return reference of static object
s& getInstance ()
{
return singleObject;
}
/* Normally with static pointer instance, getInstnace look like as
s& getInstace ()
{
// trying to avoid multiple copies of singleObject
lock_mutex ()
if (singleObject == null)
singleObjecct = new S();
unlock_mutex ();
return *singleObject;
}
*/
};
S S::singleObject;
getInstance 関数 (コメントなし) では、静的オブジェクトの参照が返されます。スレッドセーフなメカニズムが必要ですか?
2 番目の getInstance (コメント付き) では、singleObject が null の場合にオブジェクトを作成します。つまり、ロック機構が必要で、同期する必要がありますよね?