2010-11-23 39 views
23

函數pthread_mutex_init允許您指定一個指向屬性的指針。但是我還沒有找到關於pthread屬性的一個很好的解釋。我一直只提供NULL。這個說法有用嗎?pthread mutex的「屬性」是什麼?

的文件,對於那些你們誰忘了:

調用pthread_mutex_init(3)BSD庫 功能手冊
調用pthread_mutex_init(3)

名稱 調用pthread_mutex_init - 創建一個互斥

內容簡介

#include <pthread.h> 

int 
pthread_mutex_init(pthread_mutex_t *restrict mutex, 
    const pthread_mutexattr_t *restrict attr); 

描述 pthread_mutex_init()函數創建一個新的互斥鎖,其屬性 指定爲 與attr。如果attr爲NULL,則使用默認屬性。

回答

33

查找信息的最佳位置來自POSIX標準頁面。

A NULL互斥屬性爲您提供了一個實現定義的默認屬性。如果您想了解可以使用屬性執行的操作,請查看following reference並按照SEE ALSO部分中的pthread_mutexattr_*鏈接進行操作。通常情況下,默認屬性是一組明智的屬性,但它可能因平臺而異,所以我更願意顯式創建具有已知屬性的互斥鎖(更適合於可移植性)。

這是標準的第7期,1003.1-2008。起點爲here。單擊左下角的Headers將允許您導航到特定功能(包括pthreads.h)。

的屬性,可以設置或獲取:

  • type(死鎖,死鎖檢測,遞歸等)。
  • robustness(當你獲得一個互斥並且擁有它時原始的所有者死亡時會發生什麼)。
  • process-shared attribute(用於跨進程邊界共享互斥鎖)。
  • protocol(線程在優先級較高的線程想要互斥體時的行爲方式)。
  • priority ceiling(臨界區運行的優先級,防止優先級反轉的一種方法)。

而且,爲了完整性,還有init and destroy calls以及與特定屬性沒有直接關係,但用於創建它們。

1

如果向下滾動功能<pthread.h>上市,你會發現一堆pthread_mutexattr_...功能,包括initdestroy和功能設置一個互斥體的各種屬性。當您通過NULL時,會爲所有這些屬性創建互斥體,但如果您需要修改特定屬性,則可以構造一個pthread_mutexattr_t結構並將其傳入。

4

所有互斥體屬性均設置爲互斥體屬性由如下形式的函數對象:

int pthread_mutexattr_setname(pthread_attr_t *attr, Type t); 

所有互斥屬性由以下形式的函數從互斥鎖屬性對象中檢索:

其中名稱和類型被定義爲在標籤
int pthread_mutexattr_getname(const pthread_attr_t *attr, Type *t); 

如下:

Type and Name Description and Value(s) 
int protocol Define the scheduling classes for mutex locks 
       PTHREAD_PRIO_NONE,PTHREAD_PRIO_PROTECT, 
       PTHREAD_PRIO_INHERIT 

int pshared Defines whether a mutex is shared with other processes. 
       PTHREAD_PROCESS_SHARED, PTHREAD_PROCESS_PRIVATE 

int prioceiling Used for mutex attribute priority ceiling values. 
       See POSIX.1 section 13 

int type Application defined mutex locking 
       PTHREAD_MUTEX_NORMAL,PTHREAD_MUTEX_RECURSIVE, 
       PTHREAD_MUTEX_ERRORCHECK,PTHREAD_MUTEX_DEFAULT 
0

將NULL應用於此參數意味着使用默認參數。 因此,出於某些原因,您可能需要更改這些默認設置(使用pthread_mutexattr_init)。

該文檔說明了您需要的有關這些互斥鎖設置的所有信息。

+3

如果文檔有用,則不需要問這個問題。 :-)在我偶然發現這個問題之前,我一直在努力尋找相同問題的答案。 – 2013-05-26 15:34:13