Mutex属性オブジェクトのtype属性の値を設定します。
int pthread_mutexattr_settype(pthread_mutexattr_t *attr, int type);
pthread_mutexattr_settype()は、attrが参照するMutex属性オブジェクトのtype属性をtypeに設定します。デフォルトのtype属性の値はPTHREAD_MUTEX_DEFAULTです。
Mutex属性オブジェクトのtype属性には、以下の値が用いられます。
このタイプのMutexは、デッドロックを検出しません。Mutexに対する最初のロックをアンロックする前に、スレッドがこのMutexに対してロックをかけると、デッドロックを起こします。他のスレッドによってロックされたMutexをアンロックしようとした時の動作は未定義です。既にアンロックされたMutexに対してアンロックしようとした時の動作も未定義です。
このタイプのMutexはエラーチェック機能を提供します。Mutexに対する最初のロックをアンロックする前に、スレッドがこのMutexに対してロックをかけると、エラーを返します。他のスレッドによってロックされたMutexをアンロックしようとすると、エラーを返します。既にアンロックされたMutexに対してアンロックしようとすると、エラーを返します。
Mutexに対する最初のロックをアンロックする前に、スレッドがこのMutexに対してロックをかけると、Mutexのロックは成功します。PTHREAD_MUTEX_NORMALのタイプのMutexにて起きる再ロックでのデッドロックは、このタイプのMutexでは起きません。このMutexを重ねてロックした場合は、他のスレッドがロックを獲得出来る前に同じ回数のアンロックをする必要があります。他のスレッドが既にロックしているMutexをアンロックしようとすると、エラーを返します。既にアンロックされたMutexに対してアンロックしようとすると、エラーを返します。
このタイプのMutexに再帰的なロックをかけようとした時の結果は未定義です。現在のスレッドがロックしていない、このタイプのMutexに対してアンロックしようとした時の結果は未定義です。実装によっては、このMutexのタイプは他のMutexのタイプになっている事もあります。
pthread_mutexattr_settype()が成功した時には0を返します。エラーの時はエラーに応じた値を返します。
UNIXはただ死んだだけでなく、本当にひどい臭いを放ち始めている -- あるソフトウェアエンジニア