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

mutex の型属性の設定

pthread_mutexattr_settype(3T)


#include <pthread.h>

int pthread_mutexattr_settype(pthread_mutexattr_t  *attr , int type);

pthread_mutexattr_settype(3T) は、 mutex の 型 (type) 属性を設定します。型 属性のデフォルト値は PTHREAD_MUTEX_DEFAULT です。

型 (type) 引数は mutex の型を指定します。有効な mutex 型を以下に示します。


PTHREAD_MUTEX_NORMAL

この型の mutex はデッドロックを検出しません。スレッドが、この mutex をロック解除しないでもう一度ロックしようとすると、スレッドはデッドロックします。別のスレッドによってロックされた mutex をロック解除しようとした場合、引き起こされる動作は未定義です。また、ロック解除された mutex をロック解除しようとした場合、引き起こされる動作は不定です。


PTHREAD_MUTEX_ERRORCHECK

この型の mutex はエラーチェックを行います。スレッドがこの mutex をロック解除しないでもう一度ロックしようとすると、エラーを返します。別のスレッドがロックした mutex をロック解除しようとすると、エラーを返します。また、ロック解除された mutex をロック解除しようとするとエラーを返します。


PTHREAD_MUTEX_RECURSIVE

スレッドがこの mutex をロック解除しないでもう一度ロックしようとすると、正常にロックできます。PTHREAD_MUTEX_NORMAL 型の mutex ではロックを繰り返すとデッドロックが発生しますが、この型の mutex では発生しません。複数回ロックされた mutex を別のスレッドが獲得するときには、その前に同じ回数ロック解除する必要があります。あるスレッドがロックした mutex を別のスレッドがロック解除しようとすると、エラーが返されます。ロック解除されている mutex をスレッドがロック解除しようとすると、エラーが返されます。 mutex の型は、プロセス共有属性が PTHREAD_PROCESS_PRIVATE の mutex に対してだけサポートされます。


PTHREAD_MUTEX_DEFAULT

このタイプの mutex を繰り返しロックしようとした場合、引き起こされる動作は未定義です。この型の mutex を、ロックしていないスレッドがロック解除しようとした場合、引き起こされる動作は未定義です。この型の、ロックされていない mutex をロック解除しようとした場合、引き起こされる動作は未定義です。この型の mutex は、他の mutex 型に割り当てることができます。Solaris スレッドでは、PTHREAD_PROCESS_DEFAULTPTHREAD_PROCESS_NORMAL に割り当てられます。

戻り値

pthread_mutexattr_settype 関数は、正常に終了すると 0 を返します。それ以外の場合は、エラーを示す値を返します。


EINVAL

type の値が無効です。


EINVAL

attr で指定された値が無効です。