pthread_mutexattr_init - ライブラリコールの説明 - Linux コマンド集 一覧表
名前
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 を返す。