侧边栏壁纸
博主头像
noerror

虚灵不寐,众理具而万事出。

  • 累计撰写 238 篇文章
  • 累计创建 9 个标签
  • 累计收到 2 条评论
标签搜索

目 录CONTENT

文章目录

pthread_attr_setstack函数用法详解

noerror
2022-10-04 / 0 评论 / 0 点赞 / 38 阅读 / 776 字 / 正在检测是否收录...

pthread_attr_setstack函数用法详解

pthread_attr_setstack函数简介

  • 头文件包含
#include <pthread.h>
  • 函数定义
int pthread_attr_setstack(pthread_attr_t * attr ,
                          void * stackaddr , size_t  stacksize );
int pthread_attr_getstack(const pthread_attr_t * attr ,
                          void ** stackaddr , size_t * stacksize );
  • 编译链接选项
-pthread

pthread_attr_setstack函数常见使用错误

  • 链接错误
    undefined reference to `pthread_attr_setstack'
    解决办法:添加链接选项
-pthread
  • 编译错误
    warning: implicit declaration of function ‘pthread_attr_setstack’ [-Wimplicit-function-declaration]
    解决办法:包含头文件
#include <pthread.h>

pthread_attr_setstack函数详细描述

pthread_attr_setstack ()函数将attr引用的thread attributes对象的堆栈地址和堆栈大小属性分别设置为stackaddr和stacksize 中指定的值。这些属性指定使用thread attributes对象attr 创建的线程应该使用的堆栈的位置和大小
stackaddr应该指向调用方分配的stacksize字节缓冲区中最低的可寻址字节。分配的缓冲区的页应该是可读和可写的。
pthread_attr_getstack ()函数返回分别由stackaddr和stacksize 指向的缓冲区中attr引用的thread attributes对象的堆栈地址和堆栈大小属性。

pthread_attr_setstack函数返回值

如果成功,这些函数返回0;错误时,它们返回一个非零错误号。

pthread_attr_setstack函数错误码

pthread_attr_setstack ()可能会失败,出现以下错误:

  • EINVAL stacksize小于PTHREAD_STACK_MIN(16384)字节。在某些系统上,如果stackaddr或"stackaddr\ +\ stacksize"没有适当对齐,也可能出现此错误。

如果stackaddr和stacksize描述的堆栈区域不能同时被调用者读取和写入,POSIX.1还记录了EACCES错误。

pthread_attr_setstack函数其他说明

这些函数是为必须确保线程堆栈放置在特定位置的应用程序提供的。对于大多数应用程序,这是不必要的,应该避免使用这些功能。(如果应用程序只需要默认值以外的堆栈大小,则使用pthread_attr_setstacksize (3)。)
当应用程序使用pthread_attr_setstack ()时,它将接管分配堆栈的责任。使用pthread_attr_setguardsize (3)设置的任何保护大小值都将被忽略。如果认为有必要,应用程序有责任分配一个保护区域(一个或多个防止读写的页面)来处理堆栈溢出的可能性。
在stackaddr中指定的地址应该适当地对齐:为了完全的可移植性,在页面边界上对齐它。ri(sysconf(_sc_pagesize))。posix_memalign (3)可能对分配有用。stacksize可能也应该是系统页面大小的倍数。
如果使用attr创建多个线程,那么调用者必须在调用pthread_create (3);之间更改堆栈地址属性,否则,线程将试图为其堆栈使用相同的内存区域,混乱将随之而来。

pthread_attr_setstack函数使用举例

参见pthread_attr_init (3)

0

评论区