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) 一个变量,它就会加锁,
等函数退出时,这样一个临时变量就会析构,就会解锁。

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