マルチスレッドプログラムでシングルトンパターンを使用したいと思います。ダブルチェックされたロック方法は、その効率には適しているようですが、この方法は壊れており、簡単にはできません。ダブルチェックロックの有効な代替方法ですか?
私は、ダブルチェックロックの代替として動作することを期待して、次のコードを記述します。それはスレッドセーフなシングルトンパターンの正しい実装ですか?
static bool created = false;
static Instance *instance = 0;
Instance *GetInstance() {
if (!created) {
Lock lock; // acquire a lock, parameters are omitted for simplicity
if (!instance) {
instance = new Instance;
} else {
created = true;
}
}
return instance;
}
最初の呼び出しでインスタンスが作成されます。 2番目の呼び出しはtrueに作成されます。最後に、他のすべての呼び出しは、よく初期化されたインスタンスを返します。
http://voofie.com/content/192/alternative-to-double-checked-locking-and-the-singleton-pattern/
単純に 'Instance * GetInstance(){静的インスタンスインスタンス;リターン&インスタンス; } ' – kennytm
誰かがあなたにまだシングルトンが悪いと言ったことはありますか?スレッドの安全性を象徴するものを作成するだけの複雑さは、問題の一部に過ぎません。 – cHao
この実装だけでなく、シングルトン原理全体が壊れています;) –