名 前
pthread_rwlockattr_setkind_np, pthread_rwlockattr_getkind_np − ス レ ッ ド の 読 み 書 き ロ ッ ク 属 性 オ ブ ジ ェ ク ト の 読 み 書 き ロ ッ ク 種 別 の 設 定 、 取 得 を 行 う
書 式
#include <pthread.h>
int
pthread_rwlockattr_setkind_np(pthread_rwlockattr_t
*attr,
int pref);
int pthread_rwlockattr_getkind_np(const pthread_rwlockattr_t
*attr,
int *pref);
−pthread で コ ン パ イ ル し て リ ン ク す る 。
glibc 向 け の 機 能 検 査 マ ク ロ の 要 件 (feature_test_macros(7) 参 照 ):
pthread_rwlockattr_setkind_np(), pthread_rwlockattr_getkind_np():
_XOPEN_SOURCE >= 500 || _POSIX_C_SOURCE >= 200809L
説 明
pthread_rwlockattr_setkind_np()
関 数 は 、 attr が
参 照 す る 読 み
書 き ロ ッ ク 属
性 オ ブ ジ ェ ク
ト の 「 ロ ッ ク
種 別 (lock kind)」 を pref
で 指 定 さ れ た
値 に 設 定 す る
。 引 き 数 pref に
は 以 下 の い ず
れ か 一 つ を 設
定 で き る 。
PTHREAD_RWLOCK_PREFER_READER_NP こ れ
が デ フ ォ ル ト
で あ る 。 ス レ
ッ ド は 複 数 の
読 み 出 し ロ ッ
ク を 保 持 で き
る 。 つ ま り 、
読 み 出 し ロ ッ
ク は 再 帰 的 で
あ る 。 Single Unix Specification
で は 、 読 み 出
し 側 が ロ ッ ク
を か け よ う と
し た 際 に 、 書
き 込 み ロ ッ ク
は な い が 書 き
込 み 側 が 待 っ
て い た 場 合 の
、 動 作 は 規 定
さ れ て い な い
。 PTHREAD_RWLOCK_PREFER_READER_NP に
設 定 し 、 読 み
出 し 側 に 優 先
度 を 与 え る と
い う こ と は 、
た と え 書 き 込
み 側 が 待 っ て
い た と し て も
、 読 み 出 し 側
が 要 求 し た ロ
ッ ク を 受 け 取
る こ と を 意 味
す る 。 読 み 出
し 側 が い る 限
り 、 書 き 込 み
側 は 待 つ こ と
に な る 。
PTHREAD_RWLOCK_PREFER_WRITER_NP こ れ
は PTHREAD_RWLOCK_PREFER_READER_NP の
書 き 込 み ロ ッ
ク 版 で あ る 。
た だ し 「 バ グ
」 を 参 照 の こ
と 。
PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP ロ
ッ ク 種 別 を こ
の 値 に 設 定 す
る と 、 読 み 出
し ロ ッ ク が 再
帰 的 に 行 わ れ
な い 限 り は 、
書 き 込 み 側 の
待 ち を 避 け る
こ と が で き る
。
pthread_rwlockattr_getkind_np() 関 数 は 、 attr が 参 照 す る 読 み 書 き ロ ッ ク 属 性 オ ブ ジ ェ ク ト の ロ ッ ク 種 別 属 性 の 値 を ポ イ ン タ ー pref に 入 れ て 返 す 。
返 り 値
成 功 す る と 、 こ れ ら の 関 数 は 0 を 返 す 。 有 効 な ポ イ ン タ ー 引 き 数 が 渡 さ れ た 場 合 、 pthread_rwlockattr_getkind_np() は 常 に 成 功 す る 。 エ ラ ー の 場 合 、 pthread_rwlockattr_setkind_np() は 0 以 外 の エ ラ ー 番 号 を 返 す 。
エ ラ ー
EINVAL |
pref に サ ポ ー ト 外 の 値 が 指 定 さ れ た 。 |
バ グ
読 み 書 き ロ ッ ク 種 別 の 値 を PTHREAD_RWLOCK_PREFER_WRITER_NP に 設 定 す る こ と は 、 値 を PTHREAD_RWLOCK_PREFER_READER_NP に 設 定 す る の と 同 じ 動 作 と な る 。 読 み 出 し ス レ ッ ド が ロ ッ ク を 保 持 す る 限 り 、 書 き 込 み ロ ッ ク を 保 持 し て い る ス レ ッ ド は 停 止 す る こ と に な る 。 ロ ッ ク 種 別 を PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP に 設 定 す る と 、 書 き 込 み 側 が 動 作 で き る よ う に な る が 、 変 数 名 か ら 分 か る よ う に 、 書 き 込 み 側 は ロ ッ ク を 再 帰 的 に 行 う こ と は で き な い 。
バ ー ジ ョ ン
関 数 pthread_rwlockattr_getkind_np() と pthread_rwlockattr_setkind_np() は glibc 2.1 で 初 め て 登 場 し た 。
準 拠
こ れ ら の 関 数 は 非 標 準 の GNU に よ る 拡 張 で あ る 。 そ の た め 、 名 前 に "_np" (non−portable; 移 植 性 が な い ) と い う 接 尾 辞 が 付 い て い る 。
関 連 項 目
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。