0

シングルトンソフトウェアデザインパターンを使用するステートエンジンがあります。状態エンジンには、複数のスレッドからアクセスできます。オブジェクトは、プログラムの起動時にメインスレッドから初期化され、レイジー初期化用に設計されていません。

私の質問は、パブリック静的メンバーを次のように揮発性にする必要があるかどうかです。

class CStateEngine final
{
    private:
        /* Contains the Singleton object */
        static CStateEngine* instance;
    protected:
        CStateEngine();
    public:
        static CStateEngine* Instance() volatile;   // Returns the Singleton instance
        static void DeleteInstance() volatile;  // Deletes the Singleton instance
}
4

1 に答える 1

4

C ++のvolatileキーワードは、他の言語と同じではありません。C ++では、コンパイラが値が常にメモリから新しく読み取られ、キャッシュされた値が使用されないようにすることを意味します。

埋め込まれた世界や他の場所を使用しています。特定の変数を常に最新の状態で表示したい場合は、それをとしてマークしますvolatile

ただし、マルチスレッドとは何の関係もありません。

マルチスレッド環境ではシングルトンを使用しないでください。複数のスレッドがオブジェクトにアクセスしようとするため、競合の原因になります。それはあなたのプログラムを遅らせるでしょう、そしてそれはそもそもスレッドを使うことを完全に打ち負かします。

オブジェクトを渡す必要があり、必要に応じて新しいオブジェクトを作成できる必要があります。

それができない場合は、デザインを確認してください。

于 2013-03-07T11:02:47.523 に答える