【Linux高級環境編程】線程同步的封裝
文章目錄
線程同步的概念
一、互斥量
1.1、互斥量概念
1.2、互斥量初始化
1.3、互斥量的銷毀
1.4、互斥量的加鎖與解鎖操作
1.5、回憶鎖的語義:嘗試鎖
1.6、互斥量的操作順序
二、線程安全版本地CLLogger類
三、互斥量的封裝
四、條件變量及其封裝
五、事件對象的封裝
線程同步的概念
通常,對一個存儲單元的訪問,要經歷三個步驟:
將內存單元中的數據,讀入寄存器
對寄存器中的值進行運算
將寄存器中的值,寫回內存單元
無鎖時出錯的情況:
一、互斥量
1.1、互斥量概念
可以通過使用pthread的互斥接口保護數據,確保同一時間里只有一個線程訪問數據。
互斥量mutex,本質上就是一把鎖:
在訪問共享資源前,對互斥量進行加鎖
在訪問完成后釋放互斥量上的鎖
對互斥量進行加鎖后,任何其他試圖再次對互斥量加鎖的線程將會被阻塞,直到鎖被釋放
1.2、互斥量初始化
互斥量在使用前,必須要對互斥量進行初始化,函數原型:
#include
1
2
3
參數與返回值:
mutex:即互斥量,類型是pthread_mutex_t
注意:mutex必須指向有效的內存區域
attr:設置互斥量的屬性,通常可采用默認屬性,即可將attr設為NULL
成功返回0,出錯返回錯誤碼
1.3、互斥量的銷毀
互斥量在使用完畢后,必須要對互斥量進行銷毀,以釋放資源:
#include
1
2
3
參數與返回值:
mutex:即互斥量
成功返回0,出錯返回錯誤碼
1.4、互斥量的加鎖與解鎖操作
在對共享資源訪問之前和訪問之后,需要對互斥量進行加鎖和解鎖操作,函數原型:
#include
1
2
3
4
成功返回0
1.5、回憶鎖的語義:嘗試鎖
當使用pthread_mutex_lock時,若已被加鎖,則調用線程將被阻塞。有沒有辦法讓線程不阻塞,即實現非阻塞的語義。函數原型:
#include
1
2
3
調用該函數時,若互斥量未加鎖,則鎖住該互斥量,返回0;若互斥量已加鎖,則函數直接返回失敗,即EBUSY
1.6、互斥量的操作順序
定義一個互斥量pthread_mutex_t
調用pthread_mutex_init初始化互斥量
調用pthread_mutex_lock或者pthread_mutex_trylock對互斥量進行加鎖操作
調用pthread_mutex_unlock對互斥量解鎖
調用pthread_mutex_destroy銷毀互斥量
示例3.12(在示例3.8基礎之上)
二、線程安全版本地CLLogger類
三、互斥量的封裝
四、條件變量及其封裝
五、事件對象的封裝
linux 任務調度
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。