posix多執行緒 互斥量

2021-09-07 06:18:58 字數 975 閱讀 1442

1.互斥量初始化兩種方式:

(1)靜態初始化

#include typedef 

struct

my_struct_tag my_struct_t;

my_struct_t data = ;

int main (int argc, char *argv)

(2)動態初始化

#include typedef 

struct

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函式對...