使用互斥體使程式只執行乙個

2021-08-08 10:51:28 字數 753 閱讀 4382

引用了百科的話

互斥體實現了「互相排斥」(mutual exclusion)同步的簡單形式(所以名為互斥體(mutex))。互斥體禁止多個執行緒同時進入受保護的**「臨界區」(critical section)。

其實互斥體就像訊號量的pv操作一樣的,可以用於執行緒間的同步,避免乙個資源在被乙個執行緒操作的同時,另外的乙個執行緒也在進行操作,這樣就會破壞操作的原子性。帶來未知的錯誤

實際上互斥體mutex是用於執行緒同步

比如乙個程序先進入臨界區,先獲得鎖

另乙個程序想進入時候try lock 發現被占用

那麼直接返回,或者被掛起,等待這個資源被釋放

下面就是簡單的**段,實現程式一次只能執行乙個

handle hmutex = null;

//建立互斥物件

if(null != (hmutex = createmutex(null, false, l"mutex")))

}

createmutex 建立乙個互斥體並返回它的控制代碼 第乙個是安全屬性,null是預設, 第二個引數是是否 被隸屬, 第三個也就是互斥體的名字,也就是我們 防止多開的關鍵

第一次執行建立了這個有名互斥體 ,

當第二次執行時候,發現存在同名互斥體,所以返回錯誤

使用getlasterror() 就可以得到,already_exists的錯誤返回值,

判斷後直接返回,這樣就實現了,程式的單個執行

轉)如何使程式只執行乙個例項

要使應用程式只執行乙個例項,乙個簡單的方法是在應用程式類中使用互斥量,這可以用vc下的guidgen.exe程式產生.guidgen.exe位於vc安裝目錄commontools目錄下 例項1 新建一基於對話方塊的工程ex1,採用預設設定 2 用guidgen.exe產生乙個全域性標誌,define...

只執行乙個程式

重複執行程式會造成系統資源的浪費 這句話真彆扭 很多情況 下我們把程式最小化或者隱藏起來,想用這個程式的時候會習慣的doulbeclick程式的圖示,wo 又乙個程式執行了,我們本意是既然已經是開啟的程式,你把程式再給我顯現出來不就可以了?弱智的程式設計師阿 不是說你,也不是說我,假想。常見的方法有...

互斥執行乙個程式例項

在win32下,實現程式互斥執行的方法有很多種,我簡單分析以下幾種不同的實現 一 在vc下的實現 visual c 是win32程式設計最主要也是最強大的程式設計工具這一,引用一名話來說vc就是 只有你想不到的,沒有vc做不到的 廢話少說,下面看看用vc是如何這個功能。a 使用編譯器來實現 使用mf...