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
- linux 线程编程:线程属性
- Linux线程编程 - 线程属性控制
- Linux 多线程编程 线程属性
- linux 线程 线程属性
- Linux多线程编程之线程属性设置
- Linux C编程--线程操作3--线程属性解析
- Linux C编程--线程操作线程属性解析
- linux 线程编程:线程创建
- linux 线程编程:线程终止
- Linux线程属性总结
- Linux线程属性总结
- Linux 线程设置属性
- linux线程属性
- Linux线程属性总结
- linux线程属性
- Linux线程属性总结
- Linux线程属性总结
- Linux线程属性
- Maven 上传源码
- 网络学习第七章(逻辑地址)
- oracle基础
- C#控件一览表
- 挨踢职场求生法则-----我在IT职场打滚超过15年了,从小小的程序员做到常务副总
- linux 线程编程:线程属性
- R语言入门
- Java设计模式 享元模式
- volatile的作用
- css3学习笔记(三)---切换背景图像,融合笔记二的知识
- leetcode-213 House Robber II
- Java jdbc数据库连接池
- 数据恢复软件故障解决
- 【原创】基站定位小测