web-dev-qa-db-ja.com

pthread mutexの「属性」とは何ですか?

関数pthread_mutex_initを使用すると、属性へのポインターを指定できます。しかし、私はまだpthread属性が何であるかについての良い説明を見つけていません。私は常にNULLを常に提供しています。この議論には用途がありますか?

ドキュメンテーション、忘れた方のために:

PTHREAD_MUTEX_INIT(3)BSDライブラリ関数マニュアル
PTH​​READ_MUTEX_INIT(3)

NAME 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の場合、デフォルトの属性が使用されます。

26
vy32

その情報を見つけるのに最適な場所は、POSIX標準ページからです。

NULL mutex属性は、実装で定義されたデフォルト属性を提供します。属性で何ができるかを知りたい場合は、 以下の参照 を確認し、pthread_mutexattr_*セクションのSEE ALSOリンクをたどってください。通常、デフォルトは賢明な属性のセットですが、プラットフォームによって異なる可能性があるため、既知の属性を持つミューテックスを明示的に作成することをお勧めします(移植性のために優れています)。

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

属性を使用すると、次のものを設定または取得できます。

  • type (デッドロック、デッドロック検出、再帰的など)。
  • robustness (ミューテックスを取得し、元の所有者がそれを所持中に死亡した場合に何が起こるか)。
  • プロセス共有属性 (プロセス境界を越えてミューテックスを共有するため)。
  • protocol (優先度の高いスレッドがmutexを必要とする場合に、スレッドが優先度に関してどのように動作するか)。
  • 優先順位上限 (クリティカルセクションが実行される優先順位、優先順位の逆転を防ぐ方法)。

また、完全を期すために、 initおよびdestroy呼び出し もあります。これは、特定の属性に直接関連するものではなく、それらを作成するために使用されます。

35
paxdiablo

すべてのミューテックス属性は、次の形式の関数によってミューテックス属性オブジェクトに設定されます。

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
4
Lorenzo

_<pthread.h>_ の関数リストを下にスクロールすると、initdestroyを含む一連の_pthread_mutexattr_..._関数が見つかります。 mutexのさまざまな属性を設定する関数。 NULLを渡すと、これらすべての属性に適切なデフォルトでミューテックスが作成されますが、特定の属性を変更する必要がある場合は、_pthread_mutexattr_t_構造体を作成して渡すことができます。

1
casablanca

この引数にNULLを適用すると、デフォルトの引数が使用されます。したがって、いくつかの理由で、これらのデフォルト設定を変更したい場合があります(pthread_mutexattr_initを使用)。

ドキュメントには、これらのミューテックス設定について必要なすべてが説明されています。

0
Julio Guerra