1. 程式人生 > >條件變量模式-讓線程根據條件執行

條件變量模式-讓線程根據條件執行

阻塞 其它 互斥 clas cpu enter bsp pat 自己

 1     /// <summary>
 2     /// 條件變量模式
 3     /// 讓線程根據條件執行
 4     /// </summary>
 5     public sealed class ConditionVariablePattern
 6     {
 7         //兩個線程使用同一個鎖
 8         private readonly object m_lock = new object();
 9 
10         //復合條件(此處只是簡單的Boolean類型)
11         private bool m_condition = false
; 12 13 public void Thread1() 14 { 15 //在指定對象上獲取排他鎖 16 Monitor.Enter(m_lock); 17 18 //在鎖中原子性的測試復合條件 19 //條件不滿足時 20 while (!m_condition) 21 { 22 //臨時釋放鎖,使其它線程能夠獲取它 23 //等待另一個線程更改條件 24 //
釋放對象上的鎖並阻止當前線程,直到它重新獲取該鎖 25 Monitor.Wait(m_lock); 26 } 27 28 //走到這裏表示條件滿足,可以處理自己的業務 29 30 //永久釋放鎖 31 Monitor.Exit(m_lock); 32 } 33 34 public void Thread2() 35 { 36 //獲取一個互斥鎖 37 Monitor.Enter(m_lock);
38 39 //處理業務數據,修改條件 40 m_condition = true; 41 42 //解除線程阻塞可能會浪費一些CPU時間 43 //通知等待隊列中的線程鎖定對象狀態的更改 44 //即釋放鎖之後喚醒一個正在等待的線程 45 //Monitor.Pulse(m_lock); 46 47 //解除線程阻塞可能會浪費一些CPU時間 48 //通知所有的等待線程對象狀態的更改 49 //即釋放鎖之後喚醒所有正在等待的線程 50 Monitor.PulseAll(m_lock); 51 52 //釋放鎖 53 Monitor.Exit(m_lock); 54 } 55 }

條件變量模式-讓線程根據條件執行