在 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