首页 > 代码库 > 学习pthreads,管理线程的栈

学习pthreads,管理线程的栈

进程的地址空间分成代码段,静态数据段,堆和栈段。线程栈的位置和大小是从它所属的进程的栈中切分出来的。每个栈必须足够大,以容纳所有对等线程的函数的执行以及它们将会调用的例程链。或许你会问为什么要进行线程栈的管理?因为栈的管理由系统自动管理。但是针对具体问题,有可能系统自动管理的栈不能满足运行的要求,这时对线程的栈的管理是必要的。本文分为三个部分,第一部分给出管理线程栈的代码示例,第二部分对代码进行讲解,第三部分给出运行结果。

一 代码示例

本例程利用线程的属性对象,获取栈的大小,并改变栈的大小。

<script src="https://code.csdn.net/snippets/448660.js" type="text/javascript"></script>

二 代码讲解

<script src="https://code.csdn.net/snippets/448665.js" type="text/javascript"></script>

定义全局属性对象变量attr,定义线程所需要执行的函数dowork,该函数通过pthread_attr_getstacksize ()获取所执行线程的栈大小,打印输出。

<script src="https://code.csdn.net/snippets/448686.js" type="text/javascript"></script>
定义程序所需变量,其中stacksize是以字节为单位的变量,用于存储栈的大小。
<script src="https://code.csdn.net/snippets/448693.js" type="text/javascript"></script>
使用默认值初始化属性对象变量,利用pthread_attr_getstacksize ()获取栈的大小,然后打印输出。
<script src="https://code.csdn.net/snippets/448700.js" type="text/javascript"></script>
将新的栈大小值赋给stacksize,使用pthread_attr_setstacksize (&attr, stacksize)函数设置属性对象所将要执行线程的栈大小,并打印输出。
<script src="https://code.csdn.net/snippets/448708.js" type="text/javascript"></script>
按照属性对象创建线程,然后终止线程。
三 运行结果