Manpages

名 前

pthread_cleanup_push_defer_np, pthread_cleanup_pop_restore_np − cancelability type を 保 持 し た ま ま で ス レ ッ ド の キ ャ ン セ ル ク リ ー ン ア ッ プ ハ ン ド ラ ー の push/pop を 行 う

書 式

#include <pthread.h>

void pthread_cleanup_push_defer_np(void (*routine)(void *),
void *
arg);
void pthread_cleanup_pop_restore_np(int
execute);

−pthread を 付 け て コ ン パ イ ル と リ ン ク を 行 う 。

glibc 向 け の 機 能 検 査 マ ク ロ の 要 件 (feature_test_macros(7) 参 照 ):

pthread_cleanup_push_defer_np(), pthread_cleanup_pop_defer_np():

_GNU_SOURCE

説 明

こ れ ら の 関 数 は pthread_cleanup_push(3)pthread_cleanup_pop(3) と 同 じ だ が 、 こ の ペ ー ジ で 説 明 す る 点 が 異 な る 。

pthread_cleanup_push(3) と 同 様 に 、 pthread_cleanup_push_defer_np() は routine を そ の ス レ ッ ド の ク リ ー ン ア ッ プ ハ ン ド ラ ー の ス タ ッ ク に 追 加 す る 。 こ れ に 加 え て 、 pthread_cleanup_push_defer_np() は 現 在 の cancelability type も 保 存 し 、 cancelability type は "deferred" に 設 定 す る (pthread_setcanceltype(3) 参 照 )。 こ れ に よ り 、 こ の 関 数 が 呼 び 出 さ れ る 前 の ス レ ッ ド の cancelability type が "asynchronous" で あ っ た と し て も 、 キ ャ ン セ ル ク リ ー ン ア ッ プ が 行 わ れ る こ と が 保 証 さ れ る 。

pthread_cleanup_pop(3) と 同 様 に 、 pthread_cleanup_pop_restore_np() は そ の ス レ ッ ド の キ ャ ン セ ル ク リ ー ン ア ッ プ ハ ン ド ラ ー の ス タ ッ ク か ら 一 番 上 に あ る ク リ ー ン ア ッ プ ハ ン ド ラ ー を 取 り 出 す 。 こ れ に 加 え て 、 そ の ス レ ッ ド の cancelability type を 、 対 応 す る pthread_cleanup_push_defer_np() が 呼 ば れ た 時 点 の 値 に 戻 す 。 呼 び 出 し 側 で は 、 こ れ ら の 関 数 の 呼 び 出 し が 同 じ 関 数 の 中 で 対 と な り 、 か つ 文 法 的 に 同 じ ネ ス ト レ ベ ル (nesting level) に な る こ と を 保 証 し な け れ ば な ら な い 。 pthread_cleanup_push(3) で 説 明 さ れ て い る 他 の 制 限 も 適 用 さ れ る 。 以 下 の 一 連 の 呼 び 出 し

pthread_cleanup_push_defer_np(routine, arg);
pthread_cleanup_pop_restore_np(execute); と 以 下 は 等 価 で あ る (但 し 、 上 の 方 が よ り 簡 潔 で 効 率 的 で あ る )。

int oldtype;

pthread_cleanup_push(routine, arg);
pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, &oldtype);
...
pthread_setcanceltype(oldtype, NULL);
pthread_cleanup_pop(execute);

準 拠

こ れ ら の 関 数 は 非 標 準 の GNU に よ る 拡 張 で あ る 。 そ の た め 、 名 前 に "_np" (nonportable; 移 植 性 が な い ) と い う 接 尾 辞 が 付 い て い る 。

関 連 項 目

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

こ の 文 書 に つ い て

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