該型別是乙個結構,其中存放了互斥量的各屬性字段。在對互斥量初始化時,可以使用pthread_mutex_initializer常量初始化,或在互斥量的初始化函式中的屬性引數傳遞空指標。這樣得到互斥量為預設屬性。
對於非預設屬性,可使用如下的函式對pthread_mutexattr_t結構進行初始化和反初始化。初始化後的結構為預設屬性,其中每項屬性的修改要交給之後介紹的相關函式。
int pthread_mutexattr_init(pthread_mutexattr_t *attr);
int pthread_mutexattr_destroy(pthread_mutexattr_t *attr);
//返回值:成功,返回0 否則返回錯誤編號
在posix中是可選的,可通過檢查是否定義了_posix_thread_process_shared符號來判斷系統是否支援該屬性。
多個程序可以把乙個記憶體資料快對映到自己的位址空間中,這個資料塊就可以在多個程序間共享,所以就會涉及到同步問題。如果乙個在共享資料塊中分配的互斥量的程序共享屬性設定為pthread_process_shared,則該互斥量就可以用於程序間的同步。
//獲取屬性
int pthread_mutexattr_getpshared(const pthread_mutexattr_t *restrict attr, int *restrict pshared);
//修改屬性
int pthread_mutexattr_setpshared(pthread_mutexattr_t *attr, int pshared);
//返回值:成功,返回0 否則返回錯誤編號
健壯屬性用於多程序共享的互斥量。當持有互斥量的程序終止時,需要解決互斥量狀態恢復的問題。該屬性預設值為pthread_mutex_stalled ,意味著持有互斥量的程序終止時不會有特別的動作。如果設定屬性為pthread_mutex_robust,則在程序終止後,等待中的執行緒呼叫pthread_mutex_lock,會從中返回eownerread而不是0.
更詳細內容見《apue》中12.4節
「不占用是解鎖」指乙個執行緒對被另乙個執行緒加鎖的互斥量解鎖的情況。「已解鎖時解鎖」是指對乙個已經解鎖的互斥量解鎖的情況。
互斥量型別
沒有解鎖時重新加鎖
不占用時解鎖
已解鎖時解鎖
pthread_mutex_normal
死鎖未定義
未定義pthread_mutex_errorcheck
返回錯誤
返回錯誤
返回錯誤
pthread_mutex_recursive
允許返回錯誤
返回錯誤
pthread_mutex_default
未定義未定義
未定義
相關函式
//獲取型別屬性
int pthread_mutexattr_gettype(const pthread_mutexattr_t *restrict attr, int *restrict type);
//修改型別屬性
int pthread_mutexattr_settype(pthread_mutexattr_t *attr, int type);
//返回值:成功,返回0 否則返回錯誤編號
Linux 多執行緒互斥量互斥
同乙個程序中的多個執行緒共享所在程序的記憶體資源,當多個執行緒在同一時刻同時訪問同一種共享資源時,需要相互協調,以避免出現資料的不一致和覆蓋等問題,執行緒之間的協調和通訊的就叫做執行緒的同步問題,執行緒同步的思路 讓多個執行緒依次訪問共享資源,而不是並行 mutex被建立時可以有初始值,表示mute...
Linux 執行緒同步 互斥量(互斥鎖)
1 執行緒同步的目的是不管執行緒之間的執行如何穿插,其執行結果都是正確的。即保證多執行緒執行下結果的確定性。2 同步就是讓所有執行緒按照一定的規則執行,使得其正確性和效率都有跡可循,即執行緒同步就是對執行緒之間的穿插進行控制。3 每個物件都對應於乙個 互斥鎖 的標記,這個標記用來保證在任一時刻,只能...
Linux下互斥量詳解
當多個執行緒同時訪問其共享的資源時,需要相互協調,以防止出現資料不一致 不完整的問題,能達到這種狀態執行緒同步。而有些資源在同一時刻只有乙個執行緒訪問,對於這種資源的訪問需要競爭。當資源獲取到後,能夠防止資源被其它執行緒再次獲取的技術叫互斥。pthread mutex t mutex pthread...