0

C++ で古典的なシングルトン クラスを見てきました。私の理解では、この実装はスレッドセーフです。次に、このクラスが 2 つの DLL に含まれており、両方が 1 つのアプリケーションにロードされている場合、静的変数のコピーが 2 つ取得されるため、S クラスのインスタンスが 2 つになるため、完全にスレッド セーフではないことを読みました。

解決策はまだミューテックスロックを使用していますか? (これは C# の一般的な方法であることがわかっています。詳しくは、http: //csharpindepth.com/Articles/General/Singleton.aspxを参照してください。

class S
{
    public:
        static S& getInstance()
        {
            static S    instance; 
            return instance;
        }
    private:
        S();
        S(S const&);              // Don't Implement
        void operator=(S const&); // Don't implement
};
4

2 に答える 2

3

静的変数のスコープは、そのコンパイル単位です。

その静的メンバーを含む2つのコードブロックをコンパイルする2つのdllがある場合(さらに悪いことに、ヘッダーにある場合...)、両方のdllがその変数でコンパイルされます。

ロックがその事実を変えることはありません。

于 2013-01-23T20:47:44.897 に答える