pthread_attr_setstackaddr 子例程

用途

设置线程属性对象的 stackaddr 属性的值。

线程库 (libpthreads.a)

语法

#include <pthread.h>

int pthread_attr_setstackaddr (attr, stackaddr)
pthread_attr_t *attr;
void *stackaddr;

描述

pthread_attr_setstackaddr 子例程设置线程属性对象 attr的 stackaddr 属性的值。 此属性指定使用此属性对象创建的线程的堆栈地址。

注: pthread.h 头文件必须是使用线程库的每个源文件的第一个包含文件。 否则,应使用 -D_THREAD_SAFE 编译标志,或使用 cc_r 编译器。 在这种情况下,会自动设置标志。
已在 libpthreads中进行供应,以便在内部为用户堆栈创建 guardpages。 这仅用于调试目的。 缺省情况下,它处于关闭状态,可以通过导出以下环境变量来调用:
AIXTHREAD_GUARDPAGES_FOR_USER_STACK=n (Where n is the decimal number of guard pages.)
注: 即使导出了保护页,也仅当调用者为线程设置了 stackaddr 和 stacksize 属性时,才会构造保护页。 另外,将从用户的堆栈中创建警戒页面和对齐页面 (这将减少堆栈大小)。 如果创建保护页后的新堆栈大小小于最小堆栈大小 (PTHREAD_STACK_MIN) ,那么将不会构造保护页。

参数

描述
attr 指定线程属性对象。
stackaddr 指定要设置的堆栈地址。 它是一个空指针。 需要传递的地址不是 malloc 生成的地址的开头,而是堆栈的开头。 例如:
       stackaddr = malloc(stacksize);
       pthread_attr_setstackaddr(&thread, stackaddr + stacksize);

返回值

成功完成后,将返回 0。 否则,将返回错误代码。

错误代码

如果以下情况成立,那么 pthread_attr_setstackaddr 子例程不成功:

描述
EINVAL attr 参数无效。
ENOSYS 未实现堆栈地址 POSIX 选项。