linux线程属性设置
来源:互联网 发布:js添加input隐藏属性 编辑:程序博客网 时间:2024/05/19 20:56
在上一篇文章中,介绍了线程的创建和退出,以及相关函数的使用。其中pthread_create函数的第二个参数,是关于线程属性的设置,这也是今天所有讲述的。这些属性主要包括邦定属性、分离属性、堆栈地址、堆栈大小、优先级。其中系统默认的是非邦定、非分离、缺省1M的堆栈、与父进程同样级别的优先级。在pthread_create中,把第二个参数设置为NULL的话,将采用默认的属性配置。
(1)邦定属性。
在LINUX中,采用的是“一对一”的线程机制。也就是一个用户线程对应一个内核线程。邦定属性就是指一个用户线程固定地分配给一个内核线程,因为CPU时间片的调度是面向内核线程(轻量级进程)的,因此具有邦定属性的线程可以保证在需要的时候总有一个内核线程与之对应,而与之对应的非邦定属性就是指用户线程和内核线程的关系不是始终固定的,而是由系统来分配。
(2)分离属性。
分离属性是决定以一个什么样的方式来终止自己。在非分离情况下,当一个线程结束时,它多占用的线程没有得到释放,也就是没有真正的终止,需要通过pthread_join来释放资源。而在分离属性情况下,一个线程结束时会立即释放它所占有的系统资源。但这里有一点要注意的是,如果设置一个线程分离属性,而这个线程又运行得非常快的话,那么它很可能在pthread_create函数返回之前就终止了线程函数的运行,它终止以后就很有可能将线程号和系统资源移交给其他的线程使用,这时调用pthread_create的线程就得到错误的线程号。
这些属性都是通过一些函数来完成的,通常先调用pthread_attr_init来初始化,之后来调用相应的属性设置函数。
1、pthread_attr_init
功能: 对线程属性变量的初始化。
头文件: <pthread.h>
函数原型: int pthread_attr_init (pthread_attr_t* attr);
函数传入值:attr:线程属性。
函数返回值:成功: 0
失败: -1
2、pthread_attr_setscope
功能: 设置线程绑定属性。
头文件: <pthread.h>
函数原型: int pthread_attr_setscope (pthread_attr_t* attr, int scope);
函数传入值:attr: 线程属性。
scope:PTHREAD_SCOPE_SYSTEM(绑定)
PTHREAD_SCOPE_PROCESS(非绑定)
函数返回值得:同1。
3、pthread_attr_setdetachstate
功能: 设置线程分离属性。
头文件: <phread.h>
函数原型: int pthread_attr_setdetachstate (pthread_attr_t* attr, int detachstate);
函数传入值:attr:线程属性。
detachstate:PTHREAD_CREATE_DETACHED(分离)
PTHREAD_CREATE_JOINABLE(非分离)
函数返回值得:同1。
4、pthread_attr_getschedparam
功能: 得到线程优先级。
头文件: <pthread.h>
函数原型: int pthread_attr_getschedparam (pthread_attr_t* attr, struct sched_param* param);
函数传入值:attr:线程属性;
param:线程优先级;
函数返回值:同1。
5、pthread_attr_setschedparam
功能: 设置线程优先级。
头文件: <pthread.h>
函数原型: int pthread_attr_setschedparam (pthread_attr_t* attr, struct sched_param* param);
函数传入值:attr:线程属性。
param:线程优先级。
函数返回值:同1。
函数实现:
- #include <stdlib.h>
- #include <stdio.h>
- #include <errno.h>
- #include <pthread.h>
- static void* pthread_func_1 (void*);
- static void* pthread_func_2 (void*);
- int main (int argc, char** argv)
- {
- pthread_t pt_1 = 0;
- pthread_t pt_2 = 0;
- pthread_attr_t attr = {0};
- int ret = 0;
- pthread_attr_init (&attr); //属性设置
- pthread_attr_setscope (&attr, PTHREAD_SCOPE_SYSTEM);
- pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED);
- ret = pthread_create (&pt_1, &attr, pthread_func_1, NULL);
- if (ret != 0)
- {
- perror ("pthread_1_create");
- }
- ret = pthread_create (&pt_2, NULL, pthread_func_2, NULL);
- if (ret != 0)
- {
- perror ("pthread_2_create");
- }
- pthread_join (pt_2, NULL);
- return 0;
- }
- static void* pthread_func_1 (void* data)
- {
- int i = 0;
- for (; i < 6; i++)
- {
- printf ("This is pthread_1./n");
- if (i == 2)
- {
- pthread_exit (0);
- }
- }
- return;
- }
- static void* pthread_func_2 (void* data)
- {
- int i = 0;
- for (; i < 3; i ++)
- {
- printf ("This is pthread_2./n");
- }
- return;
- }
从上面事例中,可以得到这么一个结果,就是线程一的线程函数一结束就自动释放资源,线程二就得等到pthread_join来释放系统资源。在下一篇文章中将介绍线程锁。
- Linux 线程设置属性
- linux线程属性设置
- linux 线程学习(二)属性设置
- Linux线程属性及优先级设置分类
- linux线程属性的设置(转)
- Linux线程属性及优先级设置
- Linux线程属性及优先级设置
- Linux创建线程的属性设置
- Linux多线程编程之线程属性设置
- Linux多线程编程之设置线程属性,设置线程分离属性
- linux 线程 线程属性
- 线程属性设置
- 线程属性设置
- 线程属性设置
- 线程属性设置
- linux多线程学习(三)——线程属性设置。
- linux多线程学习(三)——线程属性设置
- linux多线程学习(三)——线程属性设置
- java并发实践学习
- Linux Shell中的数组及遍历
- Matlab计算运行时间
- 查询某字段在哪些表中存在 mysql
- 深入理解java虚拟机-4 虚拟机类加载机制
- linux线程属性设置
- Android Context 上下文 你必须知道的一切
- Hibernate – One-to-One example (Annotation)
- Tabhost中子Activity使用startActivityForResult后获取不到回调值问题的解决办法
- CocoaPod 对 iOS 版本很敏感
- FMT标签限定日期的显示格式
- 分布式系统性能测试框架
- dpkg 百度百科
- centos 启用ftp功能