1. 程式人生 > 其它 >第一部分:併發理論基礎08->併發程式設計萬能鑰匙

第一部分:併發理論基礎08->併發程式設計萬能鑰匙

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();
    }  
  }
}