android 裏面的 AutoMutex

在 frameworks/base/libs/binder/ProcessState.cpp 的 startThreadPool() 函數中,

函數一開始,就聲明瞭:

AutoMutex _l(mLock);

就去了解了一下,不復雜,但感覺很有思想。


在 frameworks/base/include/utils/threads.h 中,有:

[cpp] view plain copy
  1. class Mutex {  
  2.     ... ...  
  3.     class Autolock {  
  4.     public:  
  5.         inline Autolock(Mutex& mutex) : mLock(mutex)  { mLock.lock(); }  
  6.         inline Autolock(Mutex* mutex) : mLock(*mutex) { mLock.lock(); }  
  7.         inline ~Autolock() { mLock.unlock(); }  
  8.     private:  
  9.         Mutex& mLock;  
  10.     };  
  11.     ... ...  
  12. };  
  13.   
  14. typedef Mutex::Autolock AutoMutex;  

可以看出,在構造函數中 mLock.lock() 加鎖,在析構函數中 mLock.unlock() 解鎖。
所以,對一個需要加鎖的函數來說,我們只需要在函數開始處,聲明這樣 AutoMutex _l(mLock) 一個變量,它就會加鎖,
等函數退出時,這樣一個臨時變量就會析構,就會解鎖。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章