Linux應用程式互斥鎖mutex

2021-05-21 23:09:04 字數 1578 閱讀 2836

mutex從本質上說就是一把鎖,在應用層提供對共享資源的保護訪問。

(1)初始化

在linux下,執行緒的互斥量資料型別是pthread_mutex_t。在使用前,要對它進行初始化。通過pthread_mutex_init進行初始化,並且在釋放記憶體(free)前需要呼叫pthread_mutex_destroy.

原型:int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restric attr);

int pthread_mutex_destroy(pthread_mutex_t *mutex);

返回值:成功則返回0,出錯則返回錯誤編號。

(2)互斥操作

對共享資源的訪問,要對互斥量進行加鎖,如果互斥量已經上了鎖,呼叫執行緒會阻塞,直到互斥量被解鎖。在完成了對共享資源的訪問後,要對互斥量進行解鎖。

首先說一下加鎖函式:

int pthread_mutex_lock(pthread_mutex_t *mutex);

int pthread_mutex_trylock(pthread_mutex_t *mutex);

返回值: 成功則返回0, 出錯則返回錯誤編號。說明:具體說一下trylock函式,這個函式是非阻塞呼叫模式,也就是說,如果互斥量沒被鎖住,trylock函式將把互斥量加鎖,並獲得對共享資源的訪問許可權;如果互斥量被鎖住了,trylock函式將不會阻塞等待而直接返回ebusy,表示共享資源處於忙狀態。

再說一下解鎖函式:

原型: int pthread_mutex_unlock(pthread_mutex_t *mutex);

返回值: 成功則返回0, 出錯則返回錯誤編號。

(3)例項

如果對乙個mutex變數testlock,執行了第一次pthread_mutex_lock(testlock)之後,在unlock(testlock)之前的這段時間內,如果有其他執行緒也執行到了pthread_mutex_lock(testlock),這個執行緒就會阻塞住,直到之前的執行緒unlock之後才能執行,由此,實現同步,也就達到保護臨界區資源的目的。

#include #include #include #include void *fun1(void *arg);

void *fun2(void *arg);

int buffer = 0;

pthread_mutex_t mutex;

int running = 1;

int main(void )

void *fun1(void *arg)

}void *fun2(void *arg)

}遮蔽互斥鎖的執行結果

加上互斥鎖的執行結果

互斥鎖程式解析

include include include include pthread mutex t mutex 互斥鎖 int lock var 全域性變數 void pthread1 void arg void pthread2 void arg int main 從上可以看出互斥鎖使用流程為 pth...

互斥鎖mutex簡單應用

寫了段小 學習互斥鎖的作用。互斥鎖的作用 在程式設計中,引入了物件互斥鎖的概念,來保證共享資料操作的完整性。思路是用2個執行緒對同乙個記憶體位置buffer,進行寫和讀,為了防止2個執行緒同時對buffer進行修改,用同一把互斥鎖來限制。寫操作簡化為把buffer修改為 w 讀簡化為把buffer修...

linux執行緒互斥鎖

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