android 裏面的 AutoMutex

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

函數一開始,就聲明瞭:對象

AutoMutex _l(mLock);class

就去了解了一下,不復雜,但感受頗有思想。thread

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

[cpp] view plaincopy
class Mutex {  
    ... ...  
    class Autolock {  
    public:  
        inline Autolock(Mutex& mutex) : mLock(mutex)  { mLock.lock(); }  
        inline Autolock(Mutex* mutex) : mLock(*mutex) { mLock.lock(); }  
        inline ~Autolock() { mLock.unlock(); }  
    private:  
        Mutex& mLock;  
    };  
    ... ...  
};  
  
typedef Mutex::Autolock AutoMutex;  隨機數

能夠看出,在構造函數中 mLock.lock() 加鎖,在析構函數中 mLock.unlock() 解鎖。
因此,對一個須要加鎖的函數來講,咱們只須要在函數開始處,聲明這樣 AutoMutex _l(mLock) 一個變量,它就會加鎖,
等函數退出時,這樣一個臨時變量就會析構,就會解鎖。構造函數

真是巧妙啊!!!view

面向對象真是一門精妙的學問。
我想起了本身曾經定義過一個產生隨機數的對象,在構造函數中選取了種子,而防止了每次調用函數都選取種子的結果。
後者由於每次種子都同樣,從新產生的隨機數都同樣。vi

相關文章
相關標籤/搜索