マルチスレッドのプログラミング

pthread_attr_setguardsize(3C) の構文

#include <pthread.h> 
int pthread_attr_setguardsize(pthread_attr_t *attr, size_t guardsize);

guardsize 属性をアプリケーションで使用する目的は、次の 2 つです。

guardsize 引数は、スタックポインタのオーバーフローを防ぐためのものです。スレッドのスタックがガードとともに作成された場合、実装はスタックのオーバーフローの終わりに追加のメモリーを割り当てます。この追加メモリーは、スタックポインタのスタックオーバーフローに対するバッファーとして動作します。このバッファーにアプリケーションがオーバーフローすると、スレッドに SIGSEGV シグナルが配信されるなどのエラーが発生します。

guardsize が 0 の場合は、attr を使って作成したスレッドにはガード領域が含まれません。guardsize が 0 よりも大きい場合は、少なくとも guardsize バイトのガード領域が、attr を使って作成した各スレッドに割り当てられます。デフォルトでは、スレッドは実装で定義された 1 バイト以上のガード領域を持ちます。

準拠実装では、guardsize に含まれる値を、設定可能なシステム変数 PAGESIZE の倍数に切り上げることが認められています。sys/mman.hPAGESIZE を参照してください。実装が guardsize の値を PAGESIZE の倍数に切り上げる場合は、attr を指定して pthread_attr_getguardsize() を呼び出すと、guardsize には前回 pthread_attr_setguardsize() を呼び出したときに指定されたガードサイズが使用されます。