マルチスレッドのプログラミング

pthread_mutexattr_init の構文

int pthread_mutexattr_init(pthread_mutexattr_t *mattr);
#include <pthread.h>

pthread_mutexattr_t mattr;
int ret;

/* initialize an attribute to default value */
ret = pthread_mutexattr_init(&mattr); 

mattr不透明な型で、システムによって割り当てられた属性オブジェクトを格納します。mattr オブジェクト内の属性については、表 4–2 を参照してください。

mutex 属性オブジェクトを再度初期化する場合は、あらかじめ pthread_mutexattr_destroy(3C) を呼び出して、オブジェクトを削除しておく必要があります。pthread_mutexattr_init() を呼び出すと、不透明なオブジェクトが割り当てられます。そのオブジェクトが削除されないと、結果的にメモリーリークを引き起こします。

表 4–2 mattr のデフォルトの属性値

属性 

値 

結果 

pshared

PTHREAD_PROCESS_PRIVATE

初期化された mutex を 1 つのプロセス内で使用できます。その mutex を操作できるのは同じプロセスで生成されたスレッドだけです。 

type

PTHREAD_MUTEX_DEFAULT

Solaris Pthreads 実装では、PTHREAD_MUTEX_DEFAULT は、デッドロックを検出しない PTHREAD_MUTEX_NORMAL に割り当てられます。

プロトコル

PTHREAD_PRIO_NONE

スレッドの優先順位とスケジューリングは、そのスレッドが所有する mutex の優先順位の影響を受けません。 

prioceiling

– 

prioceiling の値は、sched_get_priority_min() および sched_get_priority_max() 関数によって返される、SCHED_FIFO 方針に関する既存の優先順位の範囲から取得されます。この優先順位の範囲は、mutex が作成された Solaris バージョンによって決定されます。

robustness

PTHREAD_MUTEX_STALLED_NP

mutex の所有者が終了すると、この mutex に関する pthread_mutex_lock() への将来のすべての呼び出しは進行過程からブロックされます。