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