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

相关文章
相关标签/搜索