首先,我们需要明白,我们在创建线程的时候,线程是有属性的,那么都包括哪些属性呢?
今天我们要讲的栈大小就是创建的线程的属性之一,在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, ¶m);
param.sched_priority += 5;
pthread_attr_setschedparam(&attr, ¶m);