?? 16.4 互斥對象、事件對象與關鍵代碼段的比較.txt
字號:
16.4 互斥對象、事件對象與關鍵代碼段的比較
從上一章開始,本書己經介紹了三種線程同步的方式,它們之間的區別如下所述:
·
互斥對象和事件對象都屬于內核對象,利用內核對象進行線程同步時,速度較慢,但利用互斥對象
和事件對象這樣的內核對象,可以在多個進程中的各個線程間進行同步。
·
關鍵代碼段工作在用戶方式下,同步速度較快,但在使用關鍵代碼段時,很容易進入死鎖狀態,因
為在等待進入關鍵代碼段時無法設定超時值。
通常,在編寫多線程程序并需要實現線程同步時,首選關鍵代碼段,由于它的使用比較簡單,如果
是在 MFC程序中使用的話,可以在類的構造函數中調用 Initi aJ izeCritical Section函數,在該
類的析構函數中調用 DeleteCriticalSection函數,在所需保護的代碼前面調用
EnterCriticalSection函數,在訪問完所需保護的資源之后,調用 LeaveCriticaJSection函數。可
見,關鍵代碼段在使用上是非常方便的,但有幾點需要注意:一是在程序中調用了 EnterCriticaJ
Section函數之后,一定要相應地調用 LeaveCriticalSection函數,否則其他等待該臨界區對象所
有權的線程將無法執行。二是如果訪問關鍵代碼段時,使用了多個臨界區對象,就要注意防止線程
死鎖的發生。另外,如果需要在多個進程間的各個線程間實現同步的話,可以使用互斥對象和事件
對象。
如果讀者希望深入學習多線程編程以及線程同步方面的知識,可以閱讀 <<Windows核心編程》這本
書。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -