pthread_attr_setstackaddr(3THR) は、スレッドスタックのアドレスを設定します。
stackaddr 属性は、スレッドのスタックのベースを定義するものです。これを NULL 以外の値に設定すると (NULL がデフォルト)、そのスタックはそのアドレスで初期化されます。
プロトタイプ: int pthread_attr_setstackaddr(pthread_attr_t *tattr,void *stackaddr); |
#include <pthread.h> pthread_attr_t tattr; void *base; int ret; base = (void *) malloc(PTHREAD_STACK_MIN + 0x4000); /* 新しいアドレスを設定する */ ret = pthread_attr_setstackaddr(&tattr, base); |
前の例では、新しいスレッドが使用するスタックのアドレスが base に格納されます。base の値が NULL ならば、pthread_create(3THR) によって新しいスレッドに少なくとも PTHREAD_STACK_MIN バイトのスタックが割り当てられます。
正常終了時は 0 です。それ以外の戻り値は、エラーが発生したことを示します。以下の条件が検出されると、この関数は失敗し、対応する値を返します。
次の例は、独自のスタックアドレスとサイズを指定してスレッドを生成する方法を示します。
#include <pthread.h> pthread_attr_t tattr; pthread_t tid; int ret; void *stackbase; /* デフォルト属性で初期化する */ ret = pthread_attr_init(&tattr); /* スタックの大きさを設定する */ ret = pthread_attr_setstacksize(&tattr, size); /* スタックの基底アドレスを設定する */ ret = pthread_attr_setstackaddr(&tattr, stackbase); /* アドレスと大きさを指定する */ ret = pthread_create(&tid, &tattr, func, arg); |