linux中的自動鎖(借鑑Mute::AutoLock)

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);
		}
	};
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章