修改线程栈大小

首先,我们需要明白,我们在创建线程的时候,线程是有属性的,那么都包括哪些属性呢?

今天我们要讲的栈大小就是创建的线程的属性之一,在pthread_attr_t 结构体中,都保存着一些缺省值,如果我们没有对其进行修改,则以缺省值进行存储

如图:

属性 结果
scope PTHREAD_SCOPE_PROCESS 新线程与进程中的其他线程发生竞争。
detachstate PTHREAD_CREATE_JOINABLE 线程退出后,保留完成状态和线程ID。
stackaddr NULL 新线程具有系统分配的栈地址。
stacksize 0 新线程具有系统定义的栈大小。
priority 0 新线程的优先级为0。
inheritsched PTHREAD_EXPLICIT_SCHED 新线程不继承父线程调度优先级。
schedpolicy SCHED_OTHER 新线程对同步对象争用使用Solaris 定义的固定优先级。线程将一直运行,直到被抢占或者直到线程阻塞或停止为止。

修改栈大小请看下面代码

pthread_attr_t attr;

struct sched_param param;

pthread_attr_init(&attr);

pthread_attr_setstacksize (&attr, 16*1024*1024);//修改栈大小为16M

//线程优先级

pthread_attr_getschedparam(&attr, &param);
param.sched_priority += 5;

pthread_attr_setschedparam(&attr, &param);


猜你喜欢

转载自blog.csdn.net/weixin_38638777/article/details/79412469
今日推荐