other versions
PTHREAD_ATTR_SETGUARDSIZE(3) | Linux Programmer's Manual | PTHREAD_ATTR_SETGUARDSIZE(3) |
名前¶
pthread_attr_setguardsize, pthread_attr_getguardsize - スレッド属性オブジェクトの guard size 属性の設定/取得を行う書式¶
#include <pthread.h> int pthread_attr_setguardsize(pthread_attr_t *attr, size_t guardsize); int pthread_attr_getguardsize(pthread_attr_t *attr, size_t *guardsize);-pthread でコンパイルしてリンクする。
説明¶
pthread_attr_setguardsize() 関数は、 attr が参照するスレッド属性オブジェクトの guard size 属性を guardsize で指定された値に設定する。返り値¶
成功すると、これらの関数は 0 を返す。 エラーの場合、0 以外のエラー番号を返す。エラー¶
POSIX.1-2001 では、エラー EINVAL がattr か guardsize が無効な場合に対して規定されている。 Linux では、これらの関数は常に成功する (ただし、移植性や将来も動作することを保証したいアプリケーションでは 正のエラーの返り値を処理するようにすべきである)。
バージョン¶
これらの関数は glibc バージョン 2.1 以降で提供されている。準拠¶
POSIX.1-2001.注意¶
ガード領域は、読み出し/書き込みアクセスが行われないように保護がかけ られた仮想メモリページで構成で構成される。スレッドがスタックをガード 領域までオーバーフローさせた場合、ほとんどのハードウェアアーキテクチャ では、スレッドに SIGSEGV シグナルが送られ、オーバーフローが発生した ことが通知される。ガード領域はページ境界から開始され、ガード領域の 大きさはスレッド作成時に内部的にシステムのページサイズに切り上げられる (その場合も pthread_attr_getguardsize() では pthread_attr_setguardsize() で設定された guard size が返される)。バグ¶
glibc 2.8 の時点では、 NPTL スレッド実装ではガード領域はスタックサイズ で割り当てられる領域の中に含まれている。一方、POSIX.1 では、スタックの 末尾に追加の領域を割り当てることが求められている。 (このため、ガード領域が大きすぎて、 実際のスタック用の場所がなくなってしまう場合、 pthread_create(3) で EINVAL エラーが発生することになる。)例¶
pthread_getattr_np(3) を参照。関連項目¶
mmap(2), mprotect(2), pthread_attr_init(3), pthread_attr_setstack(3), pthread_attr_setstacksize(3), pthread_create(3), pthreads(7)この文書について¶
この man ページは Linux man-pages プロジェクトのリリース 3.41 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。2008-10-24 | Linux |