PTHREAD_MUTEXATTR

Section: C Library Functions (3)
Updated: LinuxThreads
IndexJM Home Page

 

名前

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 を返す。


関連キーワード

mutex,pthread,mutexattr,PTHREAD,MUTEX,int,attr,lock,エラー,kind 

Index

名前
書式
説明
返り値
エラー
著者
関連項目

This document was created byman2html, using the manual pages.
Time: 03:39:09 GMT, June 22, 2021