Silphire (7255) の日記

2003 年 02 月 27 日
午後 11:45

pthread日記(47) - pthread_mutexattr_settype()

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属性には、以下の値が用いられます。

  • PTHREAD_MUTEX_NORMAL

    このタイプのMutexは、デッドロックを検出しません。Mutexに対する最初のロックをアンロックする前に、スレッドがこのMutexに対してロックをかけると、デッドロックを起こします。他のスレッドによってロックされたMutexをアンロックしようとした時の動作は未定義です。既にアンロックされたMutexに対してアンロックしようとした時の動作も未定義です。

  • PTHREAD_MUTEX_ERRORCHECK

    このタイプのMutexはエラーチェック機能を提供します。Mutexに対する最初のロックをアンロックする前に、スレッドがこのMutexに対してロックをかけると、エラーを返します。他のスレッドによってロックされたMutexをアンロックしようとすると、エラーを返します。既にアンロックされたMutexに対してアンロックしようとすると、エラーを返します。

  • PTHREAD_MUTEX_RECURSIVE

    Mutexに対する最初のロックをアンロックする前に、スレッドがこのMutexに対してロックをかけると、Mutexのロックは成功します。PTHREAD_MUTEX_NORMALのタイプのMutexにて起きる再ロックでのデッドロックは、このタイプのMutexでは起きません。このMutexを重ねてロックした場合は、他のスレッドがロックを獲得出来る前に同じ回数のアンロックをする必要があります。他のスレッドが既にロックしているMutexをアンロックしようとすると、エラーを返します。既にアンロックされたMutexに対してアンロックしようとすると、エラーを返します。

  • PTHREAD_MUTEX_DEFAULT

    このタイプのMutexに再帰的なロックをかけようとした時の結果は未定義です。現在のスレッドがロックしていない、このタイプのMutexに対してアンロックしようとした時の結果は未定義です。実装によっては、このMutexのタイプは他のMutexのタイプになっている事もあります。

pthread_mutexattr_settype()が成功した時には0を返します。エラーの時はエラーに応じた値を返します。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

UNIXはただ死んだだけでなく、本当にひどい臭いを放ち始めている -- あるソフトウェアエンジニア

処理中...