Provided by: manpages-ja-dev_0.5.0.0.20180315+dfsg-1_all bug

名前

       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_settypeattr の mutex 種別を表す属性を kind で示される値に設定する。

       pthread_mutexattr_gettypeattr の mutex 種別を表す属性を取得し、 kind  で指し示される領
       域に格納する。

返り値

       pthread_mutexattr_init  および pthread_mutexattr_destroypthread_mutexattr_gettype は常
       に 0 を返す。

       pthread_mutexattr_settype は成功すると 0 を、エラーの場合非 0 のエラーコードを返す。

エラー

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

       EINVAL kindPTHREAD_MUTEX_FAST_NP    および     PTHREAD_MUTEX_RECURSIVE_NPPTHREAD_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);

       psharedPTHREAD_PROCESS_PRIVATE  および PTHREAD_PROCESS_SHARED のいずれでもない場合、
       EINVAL を返す。 psharedPTHREAD_PROCESS_SHARED の場合、  ENOSYS  を返す。  それ以外の場
       合、 0 を返す。

                                           LinuxThreads                      PTHREAD_MUTEXATTR(3)