一.目錄互斥方案:這種互斥要求同一目錄下不能運行兩個應用程序的實例,通常用文件解決之,即程序啟動時看看所在目錄下有沒有一個特定文件的存在,在的話就退出,不在的話就自己創建一個,退出時再刪除之。這種情況下,這個臨時文件便成了同一目錄下程序已經啟動實例的標志。為了避免誤刪除導致此功能失常,可以給文件加上隱藏屬性。
二.本機互斥方案:這種互斥要求在一臺機器上只能運行一個實例。一種解決辦法是在注冊表的特定位置進行記錄,原理和文件互斥類似;另一個解決辦法是利用端口,即程序啟動后在某一端口進行監聽,這樣第二個實例啟動時再去監聽就不可行了,這種方式很巧妙,無須顧忌程序異常退出問題,只是會無端占用一個端口,有時客觀環境不允許這么干。
三.單用戶互斥方案:這種互斥要求系統只允許同名用戶登錄一次,因此服務器端必須存放用戶對應的數據,當用戶登上時檢查這部分數據就可以了,這種方式最棘手的是客戶端程序的異常退出導致再也無法登錄,但讓客戶端發心跳包或是服務器端反連客戶端來解決。
綜上,互斥功能要成功,就要找到互斥對象共同的環境或是上下文。如果找到了,互斥就變成了一個技術問題。