在阅读Binder源码的时候发现有经常有AutoMutex _l(mProxyLock)
这是起线程同步的作用,现在分析一下是如何实现的
首先看一下AutoMutex的定义,搜索如下:
[Mutex.h]
typedef Mutex::Autolock AutoMutex;
,再看一下Autolock,也定义在在Mutex.h中
class Autolock {
public:
inline explicit Autolock(Mutex& mutex) : mLock(mutex) { mLock.lock(); }
inline explicit Autolock(Mutex* mutex) : mLock(*mutex) { mLock.lock(); }
inline ~Autolock() { mLock.unlock(); }
private:
Mutex& mLock;
};
可以看到,在Autolock的构造方法中调用mLock.lock()
来上锁
在析构函数中释放锁
这样,在函数开始的时候初始化一个AutoMutex变量,就会被锁住
函数执行完会自动释放这个变量就会自动执行析构函数,这个锁就会被释放
这种方式值得学习一下