mfc線程同步與資源互斥

一直不是很搞的清楚線程同步與資源互斥,不過好像這兩個也是一個統一的內容。


1.創建線程

線程同步首先要有多線程爲前提,如何創建線程:CreateThread函數(如果下文不需要引用句柄,可以提前關閉)

2.互斥對象(可以用來保護要操作的資源)

       a.實例化互斥對象 HANDLE hMutex

       b.CreateMutex

       c. WaitforSingleObject

               msdn對他的解釋,作用爲:I. The specified obj is  in  he signaled state

                                                                 II. The time-out interval elapses

        在這兩種情況下,都會返回互斥對象句柄,否則的話,線程一直等待

      d. ReleaseMutex      

      注:互斥對象只有擁有者纔有釋放權限

              計數器 :1 擁有 +1

                               2 wait     +1

                              3 Release -1         計數值爲0 的時候纔可以請求到互斥對象

               若線程獲得互斥對象擁有權,但是線程結束沒有釋放,系統會自動釋放 -1,也可以通過wait函數的返回值來判斷


  3.事件對象(有信號才能獲得)

              a. 實例化 HANDLE gEvent

              b.gxxx=CreateEvent();

              c.SetEvent(設置有信號)

             d.ResetEvent(設置無信號)

             注:所有事件都可以請求到信號,在人工事件設置有信號狀態下

                    自動重置事件是同步事件的一般做法通過,參數設置+ResetEvent來實現

   

    4. 關鍵代碼段

             a. 設置全局CRITICAL_SECTION gCs

             b. InitialCriticalSection()

             通過EnterCriticalSection和LeaveCriticalSection來實現關鍵代碼段

             c.DeleteCriticalSection()










發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章