1.互斥量初始化兩種方式:
(1)靜態初始化
#include typedefstruct
my_struct_tag my_struct_t;
my_struct_t data = ;
int main (int argc, char *argv)
(2)動態初始化
#include typedefstruct
my_struct_tag my_struct_t;
int main (int argc, char *argv)
2.加鎖和解鎖
int pthread_mutex_lock(pthread_mutex_t *mutex)
int pthread_mutex_trylock(pthread_mutex_t *mutex)
int pthread_mutex_unlock(pthread_mutex_t *mutex)
3.非阻塞式互斥量鎖
int pthread_mutex_trylock(pthread_mutex_t *mutex)
4.使用多個互斥量
使用多個互斥量易發生死鎖的問題,如乙個執行緒鎖住互斥量a後,加鎖互斥量b;同時另乙個執行緒鎖住互斥量b而等待互斥量a,則發生死鎖現象。針對死鎖,有兩種解決方法:
(1)固定加鎖層次:即所有同時需要加鎖互斥量a和互斥量b的**,必須先加鎖a,後加鎖b
(2)試加鎖和回退:在鎖住某個集合中的第乙個互斥量後,使用pthread_mutex_trylock來加鎖集合中的其他互斥量,如果失敗,則將集合中所有已加鎖互斥量釋放,並重新加鎖。
5.鏈鎖
鏈鎖的作用範圍互相交疊。當鎖住第乙個互斥量後,**進入乙個區域,該區域需要另乙個互斥量。當鎖住另乙個互斥量後,第乙個互斥量就不再需要,可以釋放它了。
鏈鎖在遍歷如樹型結構或鍊錶結構是很有用。
POSIX執行緒 互斥量
為什麼需要互斥量 執行緒最大的好處是它們可以通過全域性變數來共享資訊。但這個好處也帶來了麻煩 有可能很多執行緒同時修改某乙個全域性變數,導致該全域性變數出現錯誤。我們必須制定某些規則,使執行緒對該全域性變數的修改不會導致錯誤。這個規則就是 同步。posix執行緒使用互斥量來進行同步,經驗表明,正確使...
Posix多執行緒程式設計學習筆記(四) 互斥量(1)
一 什麼是互斥鎖 另一種在多執行緒程式中同步訪問手段是使用互斥量。程式設計師給某個物件加上一把 鎖 每次只允許乙個執行緒去訪問它。如果想對 關鍵部分的訪問進行控制,你必須在進入這段 之前鎖定一把互斥量,在完成操作之後再開啟它。互斥量函式有 pthread mutex init 初始化乙個互斥量 pt...
Posix多執行緒程式設計學習筆記(四) 互斥量(2)
四 互斥鎖屬性 執行緒和執行緒的同步物件 互斥量,讀寫鎖,條件變數 都具有屬性。在修改屬性前都需要對該結構進行初始化。使用後要把該結構 我們用pthread mutexattr init函式對pthread mutexattr結構進行初始化,用pthread mutexattr destroy函式對...