互斥鎖
線上程實際運行過程中,我們經常需要多個執行緒保持同步。這時可以用互斥鎖來完成任務;互斥鎖的使用過程中,主要有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 不指定執行緒可以獲取鎖的順序。如果多個執行緒正在等待一個互斥鎖,則獲取順序是不確定的。出現爭用時,預設行為是按優先權順序解除執行緒的阻塞。
解鎖定互斥鎖
對於 Solaris 執行緒,請參見mutex_unlock語法。
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()
{