Manpages

名 前

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