Linux 執行緒互斥 鎖

2021-08-28 23:09:44 字數 960 閱讀 8694

互斥鎖

當乙個共享資源的操作不是原子的,在多執行緒同時訪問共享資源時可能會出現達不到預期的效果錯誤,為了解決共享資源操作競爭的問題,引入了互斥鎖。

1、訪問共享資源前,必須申請該互斥鎖,若處於開鎖狀態,則申請到鎖物件,並立即占有該鎖,以防止其他執行緒訪問該資源;如果該互斥鎖處於鎖定狀態,則阻塞當前執行緒。

2、只有鎖定該互斥鎖的程序才能釋放該互斥鎖,其他執行緒試圖釋放無效。

init

pthread_mutex_t mutex_lock;

pthread_mutex_init(&mutex_lock,null);

lock

pthread_mutex_lock(&mutex_lock);  以阻塞方式申請互斥鎖;

pthread_mutex_trylock(&mutex_lock)以非阻塞方式申請互斥鎖;

unlock

pthread_mutex_unlock(&mutex_lock);

例項

2個執行緒分別對全域性變數count加加5000次,但由於操作count語句不是原子操作,會導致在最後給count記憶體賦值過程中被其他執行緒讀取導致出錯,這裡要想不出錯,2個辦法:

1、語句改為:count++;

2、加互斥鎖保護count資源;

#include#include#include#include #include int count = 0;

pthread_mutex_t mutex_lock;

void* pthread_run()

pthread_exit(null);}

int main()

核心執行緒鎖

linux執行緒互斥鎖

使用執行緒編寫程式需要技巧,而多執行緒的程式中的bug非常難以跟蹤 除錯,因為這些bug經常是難以再現的。競爭條件 當乙個執行緒訪問乙個資料結構的時候,另乙個執行緒也訪問同乙個資料結構,這時就出現了競爭條件 兩個執行緒 也可能是多個 競爭對同乙個資源的訪問。當其中乙個執行緒處理到一部分的時候,另外的...

linux 執行緒互斥鎖

一,鎖的建立 鎖可以被動態或靜態建立,可以用巨集pthread mutex initializer來靜態的初始化鎖,採用這種方式比較容易理解,互斥鎖是pthread mutex t的結構體,而這個巨集是乙個結構常量,如下可以完成靜態的初始化鎖 pthread mutex t mutex pthrea...

Linux執行緒互斥鎖

一,鎖的建立 鎖可以被動態或靜態建立,可以用巨集pthread mutex initializer來靜態的初始化鎖,採用這種方式比較容易理解,互斥鎖是pthread mutex t的結構體,而這個巨集是乙個結構常量,如下可以完成靜態的初始化鎖 pthread mutex t mutex pthrea...