在 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