首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

寫給初學者:多線程系列 (八) —— 管程

     編輯:關於C語言

Monitor 類別與 lock 關鍵字完整機制圖解

Monitor 方法表
圖 1:Monitor 靜態方法總覽
lock 語法糖
圖 2:lock 編譯為 Monitor.Enter/Exit
Monitor.Wait/Pulse
圖 3:Wait/Pulse/PulseAll 等待通知機制
Monitor.TryEnter
圖 4:TryEnter 超時嘗試獲取鎖
Monitor 完整範例
圖 5:生產者消費者完整範例

核心觀念

  • lock(obj) = Monitor.Enter(obj); try { ... } finally { Monitor.Exit(obj); }
  • Wait 釋放鎖並等待,Pulse 通知一個等待線程,PulseAll 通知全部
  • 鎖物件必須為參考型別,建議用 private readonly object _lock = new object();
  • 避免鎖 this、typeof(Type)、字串常數
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved