簡體   English   中英

易失的Singleton成員?

[英]Volatile Singleton member?

我有一個使用Singleton軟件設計模式的狀態引擎。 狀態引擎可以由多個線程訪問。 該對象是在程序啟動時從主線程初始化的,不適用於延遲初始化。

我的問題是,是否應該像這樣使公共靜態成員易變:

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
}

C ++中的volatile關鍵字與其他任何語言都不相同。 在C ++中,這意味着編譯器將確保始終從內存中新讀取該值,並且永遠不要使用緩存的值。

它具有使用嵌入式世界和其他地方的功能。 如果您想擁有某個變量的最新視圖,可以將其標記為volatile

但是,它與多線程無關。

您不應在多線程環境中使用單例,因為當多個線程嘗試訪問您的對象時,這將導致爭用。 它將導致您的程序滯后,並且首先使用線程將其完全失敗。

您應該傳遞對象,並且應該能夠根據需要創建新對象。

如果您不能這樣做,請檢查您的設計。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM