pthread_mutex_unlock

pthread_mutex_unlock

pthread_mutex_unlock是可以解除鎖定 mutex 所指向的互斥鎖的函式。

互斥鎖

線上程實際運行過程中,我們經常需要多個執行緒保持同步。這時可以用互斥鎖來完成任務;互斥鎖的使用過程中,主要有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(μtex); /* release the mutex */

pthread_mutex_unlock()可釋放 mutex引用的互斥鎖對象。互斥鎖的釋放方式取決於互斥鎖的類型屬性。 如果調用 pthread_mutex_unlock()時有多個執行緒被 mutex對象阻塞,則互斥鎖變為可用時調度策略可確定獲取該互斥鎖的執行緒。 對於PTHREAD_MUTEX_RECURSIVE類型的互斥鎖,當計數達到零並且調用執行緒不再對該互斥鎖進行任何鎖定時,該互斥鎖將變為可用。

pthread_mutex_unlock返回值

pthread_mutex_unlock()在成功完成之後會返回零。其他任何返回值都表示出現了錯誤。如果出現以下情況,該函式將失敗並返回對應的值。

•EPERM

•當前執行緒不擁有互斥鎖。

代碼示例

下面 顯示了使用互斥鎖定的一些代碼段。

#include <pthread.h>

pthread_mutex_t count_mutex;

long long count;

void

increment_count()

{

pthread_mutex_lock(&count_mutex);

count = count + 1;

pthread_mutex_unlock(&count_mutex);

}

long long

get_count()

{

long long c;

pthread_mutex_lock(&count_mutex);

c = count;

pthread_mutex_unlock(&count_mutex);

return (c);

}

上面兩個函式將互斥鎖用於不同目的。 increment_count()函式使用互斥鎖確保對共享變數進行原子更新。 get_count()函式使用互斥鎖保證以原子方式讀取 64 位數量count。在 32 位體系結構上,longlong實際上是兩個 32 位數量。

讀取整數值時執行的是原子運算,因為整數是大多數計算機中常見的字長

相關詞條

熱門詞條

聯絡我們