《UNIX環境高階程式設計》筆記54 同步屬性

2021-08-08 02:40:37 字數 3098 閱讀 7741

用pthread_mtexattr_init初始化pthread_mutexattr_t結構,用pthread_mutexattr_destroy對該結構進行**。

[cpp]view plain

copy

#include

intpthread_mutexattr_init(phtread_mutexattr_t *attr);  

intpthread_mutexattr_destroy(phtread_mutexattr_t *attr);  

//成功則返回0,否則返回錯誤編號。

pthread_mutexattr_init函式用預設的互斥量屬性初始化pthread_mutexattr_t結構。

值得注意的兩個屬性是程序共享屬性和型別屬性。

在程序中,多個執行緒可以訪問同乙個同步物件,這是預設的行為,在這種情況下,程序共享互斥量屬性需要設定為

pthread_process_private。

存在這樣的機制,允許多個執行緒訪問共享資料一樣,多個程序訪問共享資料通常也需要同步,如果程序共享互斥屬性

設定為pthread_process_shared,從多個程序共享的記憶體區域中分配的互斥量就可以用於這些程序的同步。

可以使用pthread_mutexattr_getpshared函式查詢pthread_mutexattr_t結構,得到它的程序共享屬性,可以用

pthread_mutexattr_setpshared函式修改程序共享屬性。

[cpp]view plain

copy

#include

intpthread_mutexattr_getpshared(

const

pthread_mutexattr_t *restrict attr, 

int* restrict pshared);  

intpthread_mutexattr_setpshared(pthread_mutexattr_t *attr, 

intpshared);  

//成功返回0,否則返回錯誤編號。

型別互斥量屬性控制著互斥量的特性。posix.1定義了四種型別:

pthread_normal型別是標準的互斥量型別,並不做任何特殊的錯誤檢查和死鎖檢測。

pthread_mutex_errorcheck互斥量型別提供錯誤檢查。

pthread_mutex_recursive互斥量型別允許同乙個執行緒在互斥量解鎖之前對該互斥量進行多次加鎖。用乙個遞迴互斥

量維護鎖的計數,在解鎖的次數和加鎖相同的情況下才能釋放鎖。

pthred_mutex_default型別可以用於請求預設語義。作業系統在實現它時可以把這種型別自由地對映到其他型別。

例如在linux中,這種型別對映為普通的互斥量型別。

可以使用pthread_mutexattr_gettype函式得到互斥量型別屬性,用pthread_mutexattr_settype函式修改互斥量型別屬性。

[cpp]view plain

copy

#include

intpthread_mutexattr_gettype(

const

pthread_mutexattr_t *restrict attr, 

int*restrict type);  

intpthread_mutexattr_settype(pthread_mutexattr_t *attr, 

inttype);  

//成功返回0,否則返回錯誤編號

讀寫鎖也有屬性,使用pthread_rwlockattr_init初始化pthread_rwlockattr_t結構,用pthread_rwlockattr_destroy**結構。

[cpp]view plain

copy

#include

intpthread_rwlockattr_init(pthread_rwlockattr_t *attr);  

intpthread_rwlockattr_destroy(pthread_rwlockattr_t *attr);  

//成功則返回0,否則返回錯誤編號

讀寫鎖支援的唯一屬性是程序共享屬性,該屬性與互斥量的程序共享屬性相同,就像互斥量的程序共享屬性一樣。用一對函式

來讀取和設定讀寫鎖的程序屬性。

[cpp]view plain

copy

#include 

intpthread_rwlockattr_getshared(

const

*pthread_rwlockattr_t *restrict attr, 

int*restrict pshared);  

intpthread_rwlockattr_setpshared(pthread_rwlockattr_t *attr, 

intpshared);  

//成功則返回0,否則返回錯誤編號。

條件變數也有屬性,通過一對函式用於初始化和**。

[cpp]view plain

copy

#include 

intpthread_condattr_init(pthread_condattr_t *attr);  

intpthread_condattr_destroy(pthread_condattr_t *attr);  

//成功返回0,否則返回錯誤編號。

條件變數支援程序共享屬性。

[cpp]view plain

copy

#include

intpthread_condattr_getpshared(

const

pthread_condattr* restrict attr, 

int*restrict pshared);  

intpthread_condattr_setpshared(pthread_condattr_t *attr, 

intpshared);  

//成功則返回0,否則返回錯誤編號。

《unix環境高階程式設計》筆記2

第四章 檔案和目錄 本章將描述檔案系統特徵和檔案性質 1 stat fstat和lstat函式 原型 include int stat const char restrict pathname,struct stat restrict buf int fstat int filedes,struct...

UNIX環境高階程式設計學習筆記

include include include include int main int argc,char argv err sys can t open s argv 1 while dirp readdir dp null printf s n dirp d name closedir dp ...

unix環境高階程式設計

unix 日曆時間 自1970 年1 月1 日00 00 00 以來的國際標準時間 utc 程序時間 cpu 時間 時鐘時間 程序執行時間的總量。使用者cpu 時間 執行使用者指令時間量。系統cpu 時間 執行核心所經歷時間。命令 time 第三章至第七章 原子操作 任何乙個要求多於1 個函式呼叫的...