[英]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.