Linux 互斥量屬性

2021-08-15 23:20:08 字數 1756 閱讀 4398

該型別是乙個結構,其中存放了互斥量的各屬性字段。在對互斥量初始化時,可以使用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...