無論是Mutex還是Event都有同步和互斥兩種用法。很多資源因為本身的特性,要求同時只能有壹個線程訪問,比如vector之類的數據結構,同時有兩個線程做插入操作,數據就會出錯;代碼也是壹樣,有壹些代碼本身是不允許在多線程中間同時進入的。這時候就可以用Mutex或者Event來進行互斥。
具體方法是創建壹個初值為True(Set)的AutoReset(ManualReset參數為FALSE)的Mutex或者Event,然後每次要訪問對應的資源的時候首先WaitForSingleObject,成功Wait到之後,Event或者Mutex會變成False(Unset)的狀態,其他線程就無法進入;等到使用結束之後,再SetEvent使Mutex或者Event恢復Set的狀態,讓其他等待的線程進入。
CriticalSection之類的模塊在內部也是使用了Event或者Mutex來完成互斥的。註意需要對每壹個互斥的資源或代碼使用壹個獨立的Mutex或者Event。