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.51 の一部である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。2008-10-24 | Linux |