kazmax - Linux で自宅サーバー

pthread_mutexattr_init - ライブラリコールの説明 - Linux コマンド集 一覧表

  1. 名前
  2. 書式
  3. 説明
  4. 返り値
  5. エラー
  6. 著者
  7. 関連項目

名前

pthread_mutexattr_init, pthread_mutexattr_destroy, pthread_mutexattr_settype, pthread_mutexattr_gettype - mutex 作成時の属性

書式

#include <pthread.h>
int pthread_mutexattr_init(pthread_mutexattr_t * attr );
int pthread_mutexattr_destroy(pthread_mutexattr_t * attr );
int pthread_mutexattr_settype(pthread_mutexattr_t * attr , int kind );
int pthread_mutexattr_gettype(const pthread_mutexattr_t * attr , int * kind );

説明


mutex の属性は mutex 作成時に、   pthread_mutex_init (3) の第 2 引数として mutex 属性オブジェクトを渡すことで 指定することができる。 "NULL" を渡すことは、すべての属性がデフォルト値に 設定された mutex 属性オブジェクトを渡すことと同等である。
"pthread_mutexattr_init" は mutex 属性オブジェクト "attr" を初期化し、すべての属性をデフォルトの値に設定する。
"pthread_mutexattr_destroy" は mutex 属性オブジェクトを破壊する。 破壊された mutex 属性オブジェクトは 再び初期化されるまで再使用してはならない。 "pthread_mutexattr_destroy" は LinuxThreads の実装では何もしない。
LinuxThreads はただ 1 つの mutex 属性に対応している。 それは mutex 種別 (mutex kind) で、 「速い (fast) 」 mutex を表す "PTHREAD_MUTEX_FAST_NP" か、「再帰的な (recursive) 」 mutex を表す "PTHREAD_MUTEX_RECURSIVE_NP" 、「エラー検査を行なう (error checking) 」 mutex を表す "PTHREAD_MUTEX_ERRORCHECK_NP" のいずれかの値をとる。 "NP" という接尾辞が示すように、 これは POSIX 標準に対するポータブルでない拡張で、 ポータブルなプログラムでは用いるべきでない。
mutex 種別は、 あるスレッドが自分自身で pthread_mutex_lock (3)ですでに保持している mutex をロックしようとしたときに、 何が起こるかを決定する。 mutex が「速い (fast) 」という種別の場合、 pthread_mutex_lock (3)は単に呼び出しスレッドを永遠に停止させる。 mutex が「エラー検査を行なう (error checking) 」という種別の場合、 pthread_mutex_lock (3)はエラーコード "EDEADLK" とともに直ちに返る。 mutex が「再帰的な (recursive) 」という種別の場合、 pthread_mutex_lock (3)の呼び出しは成功の返り値とともに直ちに返る。 mutex を保持しているスレッドが何回ロックしたかがその mutex に記録される。 保持しているスレッドがロック解除状態に戻るためには、 同じ回数だけ pthread_mutex_unlock (3)を呼び出さなければならない。
デフォルトの mutex 種別は「速い (fast) 」、 すなわち "PTHREAD_MUTEX_FAST_NP" である。
"pthread_mutexattr_settype""attr" の mutex 種別を表す属性を "kind" で示される値に設定する。
"pthread_mutexattr_gettype""attr" の mutex 種別を表す属性を取得し、 "kind" で指し示される領域に格納する。

返り値

"pthread_mutexattr_init" および "pthread_mutexattr_destroy""pthread_mutexattr_gettype" は常に 0 を返す。
"pthread_mutexattr_settype" は成功すると 0 を、エラーの場合非 0 のエラーコードを返す。

エラー


エラーのとき、 "pthread_mutexattr_settype" は次のようなエラーコードを返す:

"EINVAL"
"kind""PTHREAD_MUTEX_FAST_NP" および "PTHREAD_MUTEX_RECURSIVE_NP""PTHREAD_MUTEX_ERRORCHECK_NP" のいずれでもない。

著者

Xavier Leroy <Xavier.Leroy@inria.fr>

関連項目

  pthread_mutex_init (3),  pthread_mutex_lock (3), pthread_mutex_unlock (3).

[訳注1] glibc-linuxthreads の最新のドキュメントは Texinfo 形式で提供されている。 上の記述は glibc-linuxthreads-2.2 以降では正しくない。 以下は glibc-linuxthreads-2.3.1 の Texinfo ファイルからの引用である。 種別 (kind) が型 (type) に変更されている。
LinuxThreads はただ 1 つの mutex 属性に対応している。 それは mutex 型 (mutex type) で、 「速い (fast) 」 mutex を表す "PTHREAD_MUTEX_ADAPTIVE_NP" か、「再帰的な (recursive) 」 mutex を表す "PTHREAD_MUTEX_RECURSIVE_NP" 、「時刻情報つき (timed) 」 mutex を表す "PTHREAD_MUTEX_TIMED_NP" 、「エラー検査を行なう (error checking) 」 mutex を表す "PTHREAD_MUTEX_ERRORCHECK_NP" のいずれかの値をとる。 "NP" という接尾辞が示すように、 これは POSIX 標準に対するポータブルでない拡張で、 ポータブルなプログラムでは用いるべきでない。
mutex 型は、 あるスレッドが自分自身で pthread_mutex_lock (3)ですでに保持している mutex をロックしようとしたときに、 何が起こるかを決定する。 mutex が「速い (fast) 」という型の場合、 pthread_mutex_lock (3)は単に呼び出しスレッドを永遠に停止させる。 mutex が「エラー検査を行なう (error checking) 」という型の場合、 pthread_mutex_lock (3)はエラーコード "EDEADLK" とともに直ちに返る。 mutex が「再帰的な (recursive) 」という型の場合、 pthread_mutex_lock (3)の呼び出しは成功の返り値とともに直ちに返る。 mutex を保持しているスレッドが何回ロックしたかがその mutex に記録される。 保持しているスレッドがロック解除状態に戻るためには、 同じ回数だけ pthread_mutex_unlock (3)を呼び出さなければならない。
デフォルトの mutex 型は「時刻情報つき (timed) 」、 すなわち "PTHREAD_MUTEX_TIMED_NP" である。

[訳注2] LinuxThreads では mutex をプロセス間で共有することはできない。 glibc-linuxthreads-2.2 以降、次の 2 つの関数が追加されている。
int pthread_mutexattr_getpshared(const pthread_mutexattr_t * attr , int * pshared );
"pshared" で指し示される領域に "PTHREAD_PROCESS_PRIVATE" を格納し、常に 0 を返す。
int pthread_mutexattr_setpshared(pthread_mutexattr_t * attr , int pshared );
"pshared""PTHREAD_PROCESS_PRIVATE" および "PTHREAD_PROCESS_SHARED" のいずれでもない場合、 "EINVAL" を返す。 "pshared""PTHREAD_PROCESS_SHARED" の場合、 "ENOSYS" を返す。 それ以外の場合、 0 を返す。