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);
}
};
};