互斥鎖
線上程實際運行過程中,我們經常需要多個執行緒保持同步。這時可以用互斥鎖來完成任務;互斥鎖的使用過程中,主要有pthread_mutex_init,pthread_mutex_destory,pthread_mutex_lock,pthread_mutex_unlock這幾個函式以完成鎖的初始化,鎖的銷毀,上鎖和釋放鎖操作。
下表列出了用來處理互斥鎖的函式。
操作
| 相關函式說明
|
---|
初始化互斥鎖
| pthread_mutex_init語法
|
使互斥鎖保持一致
| pthread_mutex_consistent_np語法
|
鎖定互斥鎖
| pthread_mutex_lock語法
|
解除鎖定互斥鎖
| pthread_mutex_unlock語法
|
使用非阻塞互斥鎖鎖定
| pthread_mutex_trylock語法
|
銷毀互斥鎖
| pthread_mutex_destroy語法
|
預設調度策略 SCHED_OTHER 不指定執行緒可以獲取鎖的順序。如果多個執行緒正在等待一個互斥鎖,則獲取順序是不確定的。出現爭用時,預設行為是按優先權順序解除執行緒的阻塞。
解鎖定互斥鎖
pthread_mutex_unlock語法
int pthread_mutex_unlock(pthread_mutex_t *mutex);
#include <pthread.h>
pthread_mutex_t mutex;
int ret;
ret = pthread_mutex_unlock(&mutex); /* release the mutex */
pthread_mutex_unlock()可釋放mutex引用的互斥鎖對象。互斥鎖的釋放方式取決於互斥鎖的類型屬性。 如果調用pthread_mutex_unlock()時有多個執行緒被mutex對象阻塞,則互斥鎖變為可用時調度策略可確定獲取該互斥鎖的執行緒。 對於PTHREAD_MUTEX_RECURSIVE類型的互斥鎖,當計數達到零並且調用執行緒不再對該互斥鎖進行任何鎖定時,該互斥鎖將變為可用。
pthread_mutex_unlock返回值
pthread_mutex_unlock()在成功完成之後會返回零。其他任何返回值都表示出現了錯誤。如果出現以下情況,該函式將失敗並返回對應的值。
代碼示例
下面 顯示了使用互斥鎖定的一些代碼段。
#include <pthread.h>
pthread_mutex_t count_mutex;
long long count;
void
increment_count()
{
pthread_mutex_lock(&count_mutex);