第一部分:併發理論基礎08->併發程式設計萬能鑰匙
阿新 • • 發佈:2021-06-30
1.管程
管程就是解決併發問題的萬能鑰匙
管理共享變數以及對共享變數的操作過程,讓他們支援併發
2.MESA模型
互斥:統一個時刻只允許一個執行緒訪問共享資源
同步:執行緒之間如何通訊,協作
解決互斥問題:將共享變數及對共享變數的操作統一封裝起來。
將執行緒不安全的佇列封裝起來,對外提供執行緒安全的操作方法,
每個條件變數都有一個對應的等待佇列
public class BlockedQueue<T>{ final Lock lock = new ReentrantLock(); // 條件變數:佇列不滿 final Condition notFull = lock.newCondition(); // 條件變數:佇列不空 final Condition notEmpty = lock.newCondition(); // 入隊 void enq(T x) { lock.lock(); try { while (佇列已滿){ // 等待佇列不滿 notFull.await(); } // 省略入隊操作... //入隊後,通知可出隊 notEmpty.signal(); }finally { lock.unlock(); } } // 出隊 void deq(){ lock.lock(); try { while (佇列已空){ // 等待佇列不空 notEmpty.await(); } // 省略出隊操作... //出隊後,通知可入隊 notFull.signal(); }finally { lock.unlock(); } } }