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

スタックアドレスとサイズの設定

pthread_attr_setstack(3C) は、スタックアドレスとサイズを設定します。

pthread_attr_setstack(3C) の構文

int pthread_attr_setstack(pthread_attr_t *tattr,void *stackaddr, size_t stacksize);
#include <pthread.h> 
#include <limits.h>
pthread_attr_t tattr; 
void *base; 
size_t size; 
int ret; 
base = (void *) malloc(PTHREAD_STACK_MIN + 0x4000); 
/* setting a new address and size */ 
ret = pthread_attr_setstack(&tattr, base,PTHREAD_STACK_MIN + 0x4000);

stackaddr 属性は、スレッドのスタックのベースを定義します。stacksize 属性は、スタックサイズを指定します。stackaddr にデフォルトの NULL 以外が設定された場合、そのスタックはそのアドレスで初期化されます。このとき、スタックサイズは stacksize とみなされます。

base には、新しいスレッドが使用するスタックのアドレスが含まれます。baseNULL の場合、pthread_create(3C) は新しいスレッドに stacksize バイト以上のスタックを割り当てます。

pthread_attr_setstack(3C) の戻り値

pthread_attr_setstack() は、正常終了時に 0 を返します。それ以外の戻り値は、エラーが発生したことを示します。以下の条件が検出されると、この関数は失敗し、対応する値を返します。


EINVAL

説明:

base または tattr の値が正しくありません。stacksize の値が PTHREAD_STACK_MIN 未満です。

次の例は、独自のスタックアドレスとサイズを指定してスレッドを生成する方法を示します。

#include <pthread.h>

pthread_attr_t tattr;
pthread_t tid;
int ret;
void *stackbase;
size_t size;

/* initialized with default attributes */
ret = pthread_attr_init(&tattr);

/* setting the base address and size of the stack */
ret = pthread_attr_setstack(&tattr, stackbase,size);

/* address and size specified */
ret = pthread_create(&tid, &tattr, func, arg);