Manpages

名 前

pthread_attr_setstack, pthread_attr_getstack − ス レ ッ ド 属 性 オ ブ ジ ェ ク ト の ス タ ッ ク 属 性 の 設 定 /取 得 を 行 う

書 式

#include <pthread.h>

int pthread_attr_setstack(pthread_attr_t *attr,
void *
stackaddr, size_t stacksize);
int pthread_attr_getstack(const pthread_attr_t *
attr,
void **
stackaddr, size_t *stacksize);

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

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

pthread_attr_getstack(), pthread_attr_setstack():

_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600

説 明

pthread_attr_setstack() 関 数 は 、 attr が 参 照 す る ス レ ッ ド 属 性 オ ブ ジ ェ ク ト の ス タ ッ ク ア ド レ ス 属 性 と ス タ ッ ク サ イ ズ 属 性 を そ れ ぞ れ stackaddrstacksize で 指 定 さ れ た 値 に 設 定 す る 。 こ れ ら の 属 性 に よ り 、 ス レ ッ ド 属 性 オ ブ ジ ェ ク ト attr を 使 っ て 作 成 さ れ る ス レ ッ ド が 使 用 す べ き ス タ ッ ク の 位 置 と サ イ ズ が 指 定 さ れ る 。

stackaddr は 、 呼 び 出 し 側 で 割 り 当 て た 、 大 き さ が stacksize バ イ ト の バ ッ フ ァ ー 内 の 指 定 で き る 最 小 の ア ド レ ス バ イ ト を 指 す べ き で あ る 。 割 り 当 て ら れ た バ ッ フ ァ ー の ペ ー ジ は 読 み 書 き 両 方 が 可 能 な ペ ー ジ と な っ て い る べ き で あ る 。

pthread_attr_getstack() 関 数 は 、 ス レ ッ ド 属 性 オ ブ ジ ェ ク ト attr の ス タ ッ ク ア ド レ ス 属 性 と ス タ ッ ク サ イ ズ 属 性 を そ れ ぞ れ stackaddrstacksize が 指 す バ ッ フ ァ ー に 入 れ て 返 す 。

返 り 値

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

エ ラ ー

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

EINVAL

stacksizePTHREAD_STACK_MIN (16384) よ り も 小 さ い 。 シ ス テ ム に よ っ て は 、 stackaddrstackaddr + stacksize の ア ラ イ メ ン ト が 適 切 で な い 場 合 に も こ の エ ラ ー が 発 生 す る 。

POSIX.1−2001 で は エ ラ ー EACCES も 規 定 さ れ て お り 、 こ の エ ラ ー は stackaddrstacksize で 規 定 さ れ る ス タ ッ ク 領 域 に 呼 び 出 し 側 か ら 読 み 書 き 両 方 の ア ク セ ス が で き な い 状 況 を 表 す 。

バ ー ジ ョ ン

こ れ ら の 関 数 は glibc バ ー ジ ョ ン 2.2 以 降 で 提 供 さ れ て い る 。

属 性

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

準 拠

POSIX.1−2001.

注 意

こ れ ら の 関 数 は 、 ス レ ッ ド の ス タ ッ ク が 特 定 の 場 所 に 配 置 さ れ る こ と を 保 証 し な け れ ば な ら な い ア プ リ ケ ー シ ョ ン の た め に 提 供 さ れ て い る 。 ほ と ん ど の ア プ リ ケ ー シ ョ ン で は 、 こ の よ う な こ と は 必 要 な く 、 こ れ ら の 関 数 を 使 う の は 避 け る べ き で あ る 。 (ア プ リ ケ ー シ ョ ン が 単 に ス タ ッ ク サ イ ズ だ け を デ フ ォ ル ト の 値 か ら 変 更 す る 必 要 が あ る 場 合 に は pthread_attr_setstacksize(3) を 使 う こ と ) ア プ リ ケ ー シ ョ ン が pthread_attr_setstack() を 利 用 す る 際 に は 、 ス タ ッ ク の 割 り 当 て に 責 任 を 持 つ 必 要 が あ る 。 pthread_attr_setguardsize(3) を 使 っ て 設 定 さ れ た guard size の 値 は 無 視 さ れ る 。 必 要 と 思 わ れ る 場 合 は 、 ア プ リ ケ ー シ ョ ン が 責 任 を 持 っ て ガ ー ド 領 域 (読 み 書 き が 行 わ れ な い よ う に 保 護 さ れ た 1 個 か そ れ 以 上 の ペ ー ジ ) の 割 り 当 て を 行 い 、 ス タ ッ ク オ ー バ ー フ ロ ー の 可 能 性 に 対 処 す る よ う に す る 必 要 が あ る 。

stackaddr に 指 定 す る ア ド レ ス は 適 切 な ア ラ イ メ ン ト と な っ て い る べ き で あ る 。 完 全 な 移 植 性 を 持 た せ る た め に は 、 ペ ー ジ 境 界 (sysconf(_SC_PAGESIZE)) に 揃 え る こ と 。 割 り 当 て に は posix_memalign(3) を 使 う と よ い 。 た い て い は 、 stacksize は シ ス テ ム の ペ ー ジ サ イ ズ の 倍 数 と す べ き で あ る 。 一 つ の attr を 使 っ て 複 数 の ス レ ッ ド を 作 成 す る 場 合 、 pthread_create(3) の 次 の 呼 び 出 し を 行 う 前 に 、 呼 び 出 し 側 で ス タ ッ ク ア ド レ ス 属 性 を 変 更 し な け れ ば な ら な い 。 さ も な け れ ば 、 複 数 の ス レ ッ ド が ス タ ッ ク と し て 同 じ メ モ リ ー 領 域 を 使 お う と す る た め 、 訳 の 分 か ら な い 状 況 が 発 生 し て し ま う 。

pthread_attr_init(3) を 参 照 。

関 連 項 目

mmap(2), mprotect(2), posix_memalign(3), pthread_attr_init(3), pthread_attr_setguardsize(3), pthread_attr_setstackaddr(3), pthread_attr_setstacksize(3), pthread_create(3), pthreads(7)

こ の 文 書 に つ い て

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