最新消息

[公告2014/05/30] 如有需要將部落格中,任何一篇文章的程式碼使用在商業用途,請與我聯繫。

[公告2015/04/26] Line版的 iInfo程式與投資應用 群組已上線想加入的朋友們,請先查看 "入群須知" 再與我聯繫 Line : aminwhite5168,加入請告知身分與回答 "入群須知" 的問題。

[公告2018/04/22] 台北 Python + Excel VBA 金融資訊爬蟲課程,課程如網頁內容 金融資訊爬蟲班:台北班 Python 金融資訊爬蟲、EXCEL VBA 金融資訊爬蟲

[公告2019/01/08] 請注意:我再次重申,部落格文章的程式碼,是要提供各位參考與學習,一旦網頁改版請自行修改,別要求東要求西要我主動修改,你們用我寫東西賺錢了、交差了,請問有分我一杯羹嗎?既然賺錢沒分我,請問有什麼理由要求我修改,如果沒能力改,就花錢來找我上課。

[公告2019/12/01] 若各位有 Excel VBA 案子開發需求,歡迎與我聯繫,可接案處理。

2013年3月29日 星期五

CreateMutex建立多線程互斥機制---解決行程同步問題

最近工作上需要修改單線程DLL讓成為多行程(Multi Processes)非多執行緒(Multi Thread),讓多執行檔對單一DLL同時進行存取,在可存取資源只有一個的情況下,又必須讓多行程(Multi Processes)同時執行且不相互衝突可用的資源,這就需要一個機制來達成,那就是使用互斥,讓多個執行檔在使用單一DLL時,只有一個行程可以使用。
單行程執行

每個行程都可以去使用單一資源,不會有一個以上的行程同時去使用同一個資源的問題發生,一個行程使用完資源後會將該資源的使用全交由下一個行程使用,不會有相互衝突的問題發生,所以可說是相安無事。

多行程執行

每個行程都要使用單一資源,因為有一個以上的行程同時執行並且同時使用同一資源,將會發生資源無法分配的問題,造成行程間搶資源的競賽,就是誰先搶到誰先執行,沒搶到資源的行程執行就會失敗。
基於上述問題,要讓多行程同時執行不會發生資源互搶競賽,又能到每個行程順利執行結束,這就需要使用互斥機制Mutex來解決行程同步的問題。
在VC++中提供有Critical Section、Mutex、Event等方法可以解決行程同步問題,這裡介紹有 CreateMutex使用方法,參考如下程式碼:
Handle hMutex = NULL;

//第二個參數,TRUE表示建立佔有Mutex使用權,FALSE表示建立者不佔有Mutex使用權
hMutex = CreateMutex(NULL,FALSE,"MyMutex"); //建立Mutex
WaitForSingleObject(hMutex,INFINITE); //取得Mutex使用權限並等待使用被釋放

//......Critical section protected code here(臨界區間)

ReleaseMutex(hMutex); //釋放使用使用權,讓其他執行續或行程進入critical section

沒有留言:

張貼留言