多线程编程指南

设置栈地址和大小

pthread_attr_setstack(3C) 可以设置线程栈地址和大小。

pthread_attr_setstack(3C) 语法

int	pthread_attr_setstack(pthread_attr_t *tattr,void *stackaddr,

                           size_t stacksize);
#include <pthread.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() 成功完成后将返回零。其他任何返回值都表示出现了错误。如果出现以下情况,该函数将失败并返回对应的值。


EINVAL

描述:

basetattr 的值不正确。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);