Linux中实现自动上锁解锁
参考博客如下
https://www.jianshu.com/p/a12738fb0cd5
起因:最近由于遇见一个特别敏感的器件----在对其进行操作的时候不能有其他线程打扰(Nothing is allowed),而在API层的封装中,每个功能函数都几乎涉及了这个器件,也就意味着我API层的所有Public函数都得互斥(ALL),暂时结果就是我需要将相关的所有函数都上同一个互斥锁。
方案:由于每个函数的逻辑不尽相同,而跳转也挺多,挨个的在函数头加锁,函数尾解锁,存在容易加漏的情况,而且我是个有点强迫症的人,这样的代码,不那么优雅啊。我想到了自动锁,也是之前无意看到的Android底层库的Mute::AutoLock。看了其实现之后,利用如下方式实现了AutLock的类,每次在函数头声明一个实例构造的时候调用上锁函数,在函数结束的时候释放实例,同时调用析构函数就
解锁了。
pthread_mutex_t Test::m_mutex = PTHREAD_MUTEX_INITIALIZER;
class Test {
private:
static pthread_mutex_t m_mutex;
class Autolock {
public:
inline Autolock() {
pthread_mutex_lock(&m_mutex);
}
inline ~Autolock() {
pthread_mutex_unlock(&m_mutex);
}
};
};