linux 线程编程:线程属性

来源:互联网 发布:赵孟頫书法软件 编辑:程序博客网 时间:2024/05/22 16:38

今天写一下创建线程时,线程属性设置方法。

相关函数

#include <pthread.h>

int pthread_attr_getdetachstate(const pthread_attr_t * attr, int *detachstate);  //获取分离状态.

int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate); //设置分离状态(常用).


int pthread_attr_getschedpolicy(const pthread_attr_t *attr, int *policy); //获取调度策略.

int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy); //设置调度策略.


int pthread_attr_getschedparam(const pthread_attr_t *attr, struct sched_param *param);// 获取调度属性.

int pthread_attr_setschedparam(pthread_attr_t *attr, const struct sched_param *param);//设置调度属性.


int pthread_attr_getinheritsched(const pthread_attr_t *attr, int *inheritsched);//继承性.

int pthread_attr_setinheritsched(pthread_attr_t *attr, int inheritsched);//继承性.


int pthread_attr_setscope(pthread_attr_t *attr, int scope);//作用域.

int pthread_attr_getscope(const pthread_attr_t *attr, int *scope);//设置作用域.


int pthread_attr_getstacksize(const pthread_attr_t *restrict attr, size_t *restrict stacksize);// 获取堆栈大小.

int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize); //设置堆栈大小(常用).


int pthread_attr_getguardsize(const pthread_attr_t *restrict attr, size_t *restrict guardsize);//栈警戒区.

int pthread_attr_setguardsize(pthread_attr_t *attr, size_t guardsize);//栈警戒区.


detachstate: PTHREAD_CREATE_DETACHED,,PTHREAD_CREATE_JOINABLE(默认) (常用).

stacksize:堆栈大小,单位字节,(常用),(ulimit -s 命令,可看到系统默认线程堆栈大小).

测试代码

#include <stdio.h>#include <pthread.h>void *pfunc(void *arg);int main(int argc, char **argv){int ret = -1; pthread_t tid;pthread_attr_t attr;int detachstate;size_t stacksize;pthread_attr_init(&attr);//pthread_attr_getdetachstate(&attr, &detachstate); //分离状态.pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);  //PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_DETACHED//pthread_attr_getstacksize(&attr, &stacksize); //堆栈大小.//pthread_attr_setstacksize(&attr, stacksize);//printf("[%s:%d] stacksize:%d\n", __func__, __LINE__, stacksize/1024/1024);ret = pthread_create(&tid, &attr, pfunc, NULL);if(0 != ret){printf("[%s:%d] create pthread fail\n", __func__, __LINE__);}pthread_attr_destroy(&attr);sleep(1);ret = pthread_join(tid, NULL); //线程设置为分离状态时,调用该函数会返回错误.if(0 != ret){printf("[%s:%d] pthread join fail\n", __func__, __LINE__);}return 0;}void *pfunc(void *arg){printf("[%s:%d] new pthread enter!\n", __func__, __LINE__);//pthread_detach(pthread_self()); //调用该函数也可以将线程转换为分离状态.pthread_exit(NULL);}


运行结果

[pfunc:44] new pthread enter!
[main:36] pthread join fail


0 0
原创粉丝点击