Manpages

名 前

pthread_setcancelstate, pthread_setcanceltype − cancelability state と cancelability type を 設 定 す る

書 式

#include <pthread.h>

int pthread_setcancelstate(int state, int *oldstate);
int pthread_setcanceltype(int
type, int *oldtype);

−pthread で コ ン パ イ ル し て リ ン ク す る 。

説 明

pthread_setcancelstate() は 、 呼 び 出 し た ス レ ッ ド の cancelability state に state で 指 定 さ れ た 値 を 設 定 す る 。 変 更 前 の ス レ ッ ド の cancelability state は oldstate が 指 す バ ッ フ ァ ー で 返 さ れ る 。 state 引 き 数 に は 以 下 の 値 の い ず れ か 一 つ を 指 定 し な け れ ば な ら な い 。
PTHREAD_CANCEL_ENABLE
ス レ ッ ド は 取 り 消 し 可 能 (cancelable) で あ る 。 こ れ が 全 て の 新 し く 作 成 さ れ る ス レ ッ ド で の デ フ ォ ル ト の cancelability state で あ る 。 こ れ に は 最 初 の ス レ ッ ド も 含 ま れ る 。 ス レ ッ ド の cancelability type に よ り 、 取 り 消 し 可 能 な ス レ ッ ド が 取 り 消 し 要 求 に い つ 反 応 す る か が 決 ま る 。
PTHREAD_CANCEL_DISABLE
ス レ ッ ド は 取 り 消 し で き な い 。 取 り 消 し 要 求 を 受 信 し た 際 は 、 取 り 消 し 可 能 に 設 定 さ れ る ま で そ の 要 求 は ブ ロ ッ ク さ れ る 。

pthread_setcanceltype() は 、 呼 び 出 し た ス レ ッ ド の cancelability type に type で 指 定 さ れ た 値 を 設 定 す る 。 変 更 前 の ス レ ッ ド の cancelability type は oldtype が 指 す バ ッ フ ァ ー で 返 さ れ る 。 type 引 き 数 に は 以 下 の 値 の い ず れ か 一 つ を 指 定 し な け れ ば な ら な い 。
PTHREAD_CANCEL_DEFERRED
そ の ス レ ッ ド が 次 に 取 り 消 し ポ イ ン ト (cancellation point) の 関 数 を 呼 び 出 す ま で 取 り 消 し 要 求 が 遅 延 さ れ る 。 こ れ が 全 て の 新 し く 作 成 さ れ る ス レ ッ ド で の デ フ ォ ル ト の cancelability type で あ る 。 こ れ に は 最 初 の ス レ ッ ド も 含 ま れ る 。
PTHREAD_CANCEL_ASYNCHRONOUS
ス レ ッ ド は い つ で も 取 り 消 す こ と が で き る (通 常 は す ぐ に キ ャ ン セ ル さ れ る が 、 シ ス テ ム が そ の こ と を 保 証 し て い る わ け で は な い )。 こ れ ら の 関 数 に よ り 実 行 さ れ る 「 設 定 と 取 得 」 操 作 (set−and−get operation) は 、 同 じ 関 数 を 呼 び 出 し た プ ロ セ ス 内 の 他 の ス レ ッ ド が あ っ て も 、 ア ト ミ ッ ク に 行 わ れ る 。

返 り 値

成 功 す る と 、 こ れ ら の 関 数 は 0 を 返 す 。 エ ラ ー の 場 合 、 0 以 外 の エ ラ ー 番 号 を 返 す 。

エ ラ ー

pthread_setcancelstate() は 以 下 の エ ラ ー で 失 敗 す る 場 合 が あ る 。

EINVAL

state に 無 効 な 値 が 指 定 さ れ た 。

pthread_setcanceltype() は 以 下 の エ ラ ー で 失 敗 す る 場 合 が あ る 。

EINVAL

type に 無 効 な 値 が 指 定 さ れ た 。

属 性

マ ル チ ス レ ッ デ ィ ン グ (pthreads(7) 参 照 ) 関 数 pthread_setcancelstate() と pthread_setcanceltype() は ス レ ッ ド セ ー フ で あ る 。

準 拠

POSIX.1−2001.

注 意

ス レ ッ ド が 取 り 消 さ れ た 場 合 に 何 が 起 こ る か の 詳 細 に つ い て は pthread_cancel(3) を 参 照 。 取 り 消 し 要 求 に よ り 中 断 さ れ て は な ら な い 重 要 な ア ク シ ョ ン を ス レ ッ ド が 実 行 す る 場 合 、 短 い 時 間 だ け cancelability を 無 効 に す る の は 有 用 で あ る 。 長 い 時 間 cancelability を 無 効 に し た り 、 長 い 時 間 停 止 (block) さ れ る 可 能 性 の あ る 操 作 の 前 後 で cancelability を 無 効 に し た り す る 際 に は 注 意 す る こ と 。 な ぜ な ら 、 無 効 に し て し ま う と 、 キ ャ ン セ ル 要 求 に 対 し て ス レ ッ ド が 応 答 し な い 状 態 に な っ て し ま う か ら で あ る 。 非 同 期 キ ャ ン セ ル

cancelability type を PTHREAD_CANCEL_ASYNCHRONOUS に 設 定 し て 役 に 立 つ こ と は め っ た に な い 。 ス レ ッ ド は い つ で も キ ャ ン セ ル す る こ と が で き る こ と に な る の で 、 ス レ ッ ド が 安 全 に リ ソ ー ス の 確 保 (例 え ば malloc(3) で メ モ リ ー を 割 り 当 て る ) や mutex、 セ マ フ ォ 、 ロ ッ ク な ど の 獲 得 を 行 う こ と が で き な い 。 ア プ リ ケ ー シ ョ ン は 、 ス レ ッ ド が キ ャ ン セ ル さ れ る 際 に 、 こ れ ら の リ ソ ー ス が ど の よ う な 状 態 に あ る か を 知 る 術 は な い の で 、 リ ソ ー ス の 確 保 が 安 全 で は な く な る 。 つ ま り 、 キ ャ ン セ ル が 起 こ っ た の が 、 リ ソ ー ス の 確 保 前 な の か 、 確 保 中 な の か 、 確 保 後 な の か が 分 か ら な い 。 さ ら に 、 関 数 呼 び 出 し の 最 中 に キ ャ ン セ ル が 発 生 す る と 、 い く つ か の 内 部 デ ー タ 構 造 (例 え ば 、 malloc(3) 関 連 の 関 数 が 管 理 し て い る 未 使 用 ブ ロ ッ ク の リ ン ク リ ス ト ) が 一 貫 性 の な い 状 態 の ま ま に な っ て し ま う 可 能 性 が あ る 。 そ の 結 果 、 ク リ ー ン ア ッ プ ハ ン ド ラ ー が 役 に 立 た な い も の に な っ て し ま う 。 非 同 期 で 安 全 に キ ャ ン セ ル で き る 関 数 は async−cancel−safe functions と 呼 ば れ る 。 POSIX.1−2001 で 、 非 同 期 で 安 全 に キ ャ ン セ ル で き る よ う に 求 め ら れ て い る 関 数 は pthread_cancel(3), pthread_setcancelstate(), pthread_setcanceltype() だ け で あ る 。 一 般 的 に は 、 そ れ 以 外 の ラ イ ブ ラ リ 関 数 は 、 非 同 期 に キ ャ ン セ ル で き る ス レ ッ ド か ら 安 全 に 呼 び 出 す こ と は で き な い 。 非 同 期 で の キ ャ ン セ ル が 有 効 な 数 少 な い 状 況 と し て は 、 純 粋 に 計 算 だ け を 行 う ル ー プ に 入 っ て い る ス レ ッ ド を キ ャ ン セ ル す る と い っ た 場 面 が あ る 。 移 植 性 に 関 す る 注 意
Linux の ス レ ッ ド 実 装 で は 、 pthread_setcancelstate() の oldstate 引 き 数 に NULL を 指 定 す る こ と を 認 め て い る 。 NULL が 指 定 さ れ た 場 合 、 変 更 前 の cancelability state の 情 報 が 呼 び 出 し 側 に 返 さ れ な い 。 他 の 多 く の 実 装 で も oldstate 引 き 数 に NULL を 指 定 す る こ と を 認 め て い る が 、 POSIX.1−2001 で は こ の 点 に つ い て は 規 定 さ れ て い な い 。 し た が っ て 、 移 植 性 が 必 要 な ア プ リ ケ ー シ ョ ン で は 常 に oldstate に NULL 以 外 の 値 を 指 定 す る よ う に す べ き で あ る 。 pthread_setcanceltype() の oldtype 引 き 数 に つ い て も 、 全 く 同 じ こ と が 言 え る 。

pthread_cancel(3) を 参 照 。

関 連 項 目

pthread_cancel(3), pthread_cleanup_push(3), pthread_testcancel(3), pthreads(7)

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。