シングルトン クラスがあり、シングルトンの最初の呼び出しは 1 つのスレッドだけで行われると確信しています。遅延初期化でシングルトンを実装しました。
class MySingleton : private boost::noncopyable {
public:
/** singleton access. */
static MySingleton & instance()
{
static MySingleton myInstance;
return myInstance;
}
void f1();
void f2();
void f3();
void f4();
private:
MySingleton();
};
これで、単一のスレッド環境ですべてのシングルトンを作成する責任を持つ別のファクトリ クラスができました。シングルトンは複数のスレッドから使用でき、メソッドはミューテックスから保護されます。
最初の質問
このアプローチは受け入れられますか?
2 番目の質問
スレッドセーフでなければならない複雑なクラスがあります。
このクラスはシングルトンでなければなりません。クラスのさまざまなメソッドの呼び出しがスレッドセーフであることはどうすればよいでしょうか。例えば。
{
MySingletonLock lock;
// Other thread must wait here.
MySingleton::instance().f1();
MySingleton::instance().f3();
}
どうすればこれを入手できますか?