頭檔案
#include
函式原型
int pthread_mutex_lock(pthread_mutex_t *mutex);
返回值
在成功完成之後會返回零。其他任何返回值都表示出現了錯誤。如果出現以下任一情況,該函式將失敗並返回對應的值。
返回值種類,引用自說明文檔:
EINVAL
The value specified by mutex does not refer to an initialized mutex object.
EAGAIN
The mutex could not be acquired because the maximum number of recursive locks for mutex has been exceeded.
The pthread_mutex_lock() function may fail if:
EDEADLK
The current thread already owns the mutex.
描述
如果互斥鎖類型為 PTHREAD_MUTEX_NORMAL,則不提供死鎖檢測。嘗試重新鎖定互斥鎖會導致死鎖。如果某個執行緒嘗試解除鎖定的互斥鎖不是由該執行緒鎖定或未鎖定,則將產生不確定的行為。
如果互斥鎖類型為 PTHREAD_MUTEX_ERRORCHECK,則會提供錯誤檢查。如果某個執行緒嘗試重新鎖定的互斥鎖已經由該執行緒鎖定,則將返回錯誤。如果某個執行緒嘗試解除鎖定的互斥鎖不是由該執行緒鎖定或者未鎖定,則將返回錯誤。
如果互斥鎖類型為 PTHREAD_MUTEX_RECURSIVE,則該互斥鎖會保留鎖定計數這一概念。執行緒首次成功獲取互斥鎖時,鎖定計數會設定為 1。執行緒每重新鎖定該互斥鎖一次,鎖定計數就增加 1。執行緒每解除鎖定該互斥鎖一次,鎖定計數就減小 1。 鎖定計數達到 0 時,該互斥鎖即可供其他執行緒獲取。如果某個執行緒嘗試解除鎖定的互斥鎖不是由該執行緒鎖定或者未鎖定,則將返回錯誤。
如果互斥鎖類型是 PTHREAD_MUTEX_DEFAULT,則嘗試以遞歸方式鎖定該互斥鎖將產生不確定的行為。對於不是由調用執行緒鎖定的互斥鎖,如果嘗試解除對它的鎖定,則會產生不確定的行為。如果嘗試解除鎖定尚未鎖定的互斥鎖,則會產生不確定的行為。