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