指令介紹
pthread_mutex_init()函式是以動態方式創建互斥鎖的,參數attr指定了新建互斥鎖的屬性。如果參數attr為空,則使用默認的
互斥鎖屬性,默認屬性為快速互斥鎖 。互斥鎖的屬性在創建鎖的時候指定,在LinuxThreads實現中僅有一個鎖類型屬性,不同的鎖類型在試圖對一個已經被鎖定的互斥鎖加鎖時表現不同。
pthread_mutexattr_init()函式成功完成之後會返回零,其他任何返回值都表示出現了錯誤。
函式成功執行後,互斥鎖被初始化為未鎖住態。
互斥鎖屬性
使用
互斥鎖(互斥)可以使執行緒按
順序執行。通常,互斥鎖通過確保一次只有一個執行緒執行代碼的臨界段來同步多個執行緒。互斥鎖還可以保護
單執行緒代碼。
要更改預設的互斥鎖屬性,可以對屬性對象進行聲明和初始化。通常,互斥鎖屬性會設定在應用程式開頭的某個位置,以便可以快速查找和輕鬆修改。
初始化互斥鎖屬性對象
使用pthread_mutexattr_init(3C)可以將與
互斥鎖對象相關聯的屬性初始化為其預設值。在執行過程中,執行緒系統會為每個屬性對象分配存儲空間。
pthread_mutexattr_init 語法
int pthread_mutexattr_init(pthread_mutexattr_t *mattr);
#include <pthread.h>
pthread_mutexattr_t mattr;
int ret;/* initialize an attribute to default value */
ret = pthread_mutexattr_init(&mattr);
調用此函式時,pthread 屬性的
預設值為 PTHREAD_PROCESS_PRIVATE。 該值表示可以在進程內使用經過初始化的
互斥鎖。
mattr 的類型為 opaque,其中包含一個由系統分配的屬性對象。mattr 範圍可能的值為 PTHREAD_PROCESS_PRIVATE 和 PTHREAD_PROCESS_SHARED。PTHREAD_PROCESS_PRIVATE 是預設值。
對於互斥鎖屬性對象,必須首先通過調用 pthread_mutexattr_destroy(3C) 將其銷毀,才能重新初始化該對象。pthread_mutexattr_init() 調用會導致分配類型為 opaque 的對象。如果未銷毀該對象,則會導致記憶體泄漏。