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 生成的地址的开头,而是堆栈的开头。 例如: |
返回值
成功完成后,将返回 0。 否则,将返回错误代码。
错误代码
如果以下情况成立,那么 pthread_attr_setstackaddr 子例程不成功:
| 项 | 描述 |
|---|---|
| EINVAL | attr 参数无效。 |
| ENOSYS | 未实现堆栈地址 POSIX 选项。 |