2010-11-23 13 views
23

関数pthread_mutex_initを使用すると、属性へのポインタを指定できます。しかし、私はpthreadの属性が何であるかについての良い説明をまだ見つけていません。私はいつもNULLを提供してきました。この議論には使用はありますか?それを忘れてあなたの人々のためのpthread mutexの「属性」とは何ですか?

ドキュメント、:


pthread_mutex_initの(3)

NAME pthread_mutex_initの 関数マニュアルpthread_mutex_initの(3)FreeBSDライブラリ - ミューテックス

を作成

さんの略語

#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の標準ページからです。

NULL mutex属性は、実装定義のデフォルト属性を提供します。アトリビュートでできることを知りたい場合は、following referenceをチェックして、のセクションにあるpthread_mutexattr_*のリンクに従ってください。通常、デフォルトは属性の合理的なセットですが、プラットフォームによって異なる場合があります。したがって、既知の属性を持つmutexを明示的に作成することをお勧めします。

これは、標準、1003.1-2008の問題7です。その出発点はhereです。左下のHeadersをクリックすると、特定の機能(pthreads.hを含む)に移動できます。

属性が設定または取得することができ:

  • type(デッドロック、デッドロック検出、再帰的、など)。
  • robustness(ミューテックスを取得して元の所有者がそれを所有していたときに何が起こったか)
  • process-shared attribute(プロセス境界をまたいでミューテックスを共有するため)。
  • protocol(優先度の高いスレッドがmutexを必要とする場合、スレッドはどのように優先度の動作をするのか)。
  • priority ceiling(クリティカルセクションが実行される優先度、優先度逆転を防止する方法)。

また、特定の属性に直接関連していないが、それらを作成するために使用されたinit and destroy callsもあります。

1

あなたが<pthread.h>のリスティング機能を下にスクロールする場合は、ミューテックスの様々な属性を設定するpthread_mutexattr_...initを含む機能、destroyや機能の束を見つけます。 NULLを渡すと、これらすべての属性に適切なデフォルト値を持つミューテックスが作成されますが、特定の属性を変更する必要がある場合は、

4

のすべてのmutex属性がmutex属性に設定されますフォームの機能により対象:

int pthread_mutexattr_setname(pthread_attr_t *attr, Type t); 

すべてのmutex属性は、フォームの機能によって、mutex属性オブジェクトから取得されています

名とタイプは、タブのように定義されている
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

ドキュメントがすべて役に立ちましたら、質問する必要はありません。 :-)私はこの質問に遭遇する前に、同じ質問に対する答えを見つけるために1時間のうちに良いところを探していました。 –

関連する問題