不同於執行緒單例模式,很多時候我們希望乙個程式只有乙個例項在執行。
常規的做法有建立乙個命名檔案,通過判斷這個檔案存在不存在來確定是否已經有程序例項啟動
更進一步,可以通過對檔案加鎖的方式,從而避免前面方法中需要在程式退出時刪除檔案的操作,但是檔案加鎖
需要檔案系統的支援。fat32等檔案系統不一定支援該操作
可以利用socket埠作為鎖,而且程式退出後,作業系統會自動釋放對該埠的繫結,即自動釋放鎖,不管程式是如何退出。方式如下:
singletonprocess single(8977);
if (!single())
class singletonprocess
~singletonprocess()
}bool
operator()()
else
}return (socket_fd != -1 && rc == 0);
}std::string getlockfilename()
private:
int socket_fd = -1;
int rc;
uint16_t port;
};
單例模式 單例模式
餓漢式 急切例項化 public class eagersingleton 2.宣告靜態成員變數並賦初始值 類初始化的時候靜態變數就被載入,因此叫做餓漢式 public static eagersingleton eagersingleton new eagersingleton 3.對外暴露公共的...
單例 單例模式
簡單的實現乙個單例 instancetype sharedinstance return instance 真正的單例模式 myclass sharedinstance return instance id allocwithzone nszone zone return nil id copywi...
單例模式 懶漢式單例模式
單例模式有餓漢時模式和懶漢式 單例模式也就是說同一類只返回乙個物件供外部類使用 懶漢式即延遲初始化單例。在多執行緒環境下,簡單的懶漢式會有執行緒安全。懶漢式單例模式解決線性安全問題如下 1 使用雙重檢查鎖機制解決執行緒安全問題。2 單例模式還有更好的解決方案,即使用靜態類方式。懶漢式單例模式典型 p...