linux 线程学习(二)属性设置
来源:互联网 发布:手机一键装windows系统 编辑:程序博客网 时间:2024/05/16 09:09
属性分类
---------------------------------------------
pthread_create函数的第二个参数,是关于线程属性的设置。
属性主要包括邦定属性、分离属性、堆栈地址、堆栈大小、优先级。其中系统默认的是非邦定、非分离、缺省1M的堆栈、与父进程同样级别的优先级。在pthread_create中,把第二个参数设置为NULL的话,将采用默认的属性配置。
1)邦定属性
一对一”的线程机制,也就是一个用户线程对应一个内核线程。
邦定属性就是指一个用户线程固定地分配给一个内核线程,因为CPU时间片的调度是面向内核线程(轻量级进程)的,因此具有邦定属性的线程可以保证在需要的时候总有一个内核线程与之对应,而与之对应的非邦定属性就是指用户线程和内核线程的关系不是始终固定的,而是由系统来分配。
2)分离属性
分离属性是决定以一个什么样的方式来终止自己。
在非分离情况下,当一个线程结束时,它多占用的线程没有得到释放,也就是没有真正的终止,需要通过pthread_join来释放资源。
而在分离属性情况下,一个线程结束时会立即释放它所占有的系统资源。但这里有一点要注意的是,如果设置一个线程分离属性,而这个线程又运行得非常快的话,那么它很可能在pthread_create函数返回之前就终止了线程函数的运行,它终止以后就很有可能将线程号和系统资源移交给其他的线程使用,这时调用pthread_create的线程就得到错误的线程号。
这些属性都是通过一些函数来完成的,通常先调用pthread_attr_init来初始化,之后来调用相应的属性设置函数。
属性设置函数
---------------------------------------------
pthread_attr_init
功能: 对线程属性变量的初始化。
头文件: <pthread.h>
函数原型: int pthread_attr_init (pthread_attr_t* attr);
函数传入值:attr:线程属性。
函数返回值:成功: 0
失败: -1
pthread_attr_setscope
功能: 设置线程绑定属性。
头文件: <pthread.h>
函数原型: int pthread_attr_setscope (pthread_attr_t* attr, int scope);
函数传入值:attr: 线程属性。
scope:PTHREAD_SCOPE_SYSTEM(绑定)
PTHREAD_SCOPE_PROCESS(非绑定)
函数返回值得:同1。
pthread_attr_setdetachstate
功能: 设置线程分离属性。
头文件: <phread.h>
函数原型: int pthread_attr_setdetachstate (pthread_attr_t* attr, int detachstate);
函数传入值:attr:线程属性。
detachstate:PTHREAD_CREATE_DETACHED(分离)
PTHREAD_CREATE_JOINABLE(非分离)
函数返回值得:同1。
pthread_attr_getschedparam
功能: 得到线程优先级。
头文件: <pthread.h>
函数原型: int pthread_attr_getschedparam (pthread_attr_t* attr, struct sched_param* param);
函数传入值:attr:线程属性;
param:线程优先级;
函数返回值:同1
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 atrr = {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)
{
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)
{
int i = 0;
for (; i < 3; i ++)
{
printf ("This is pthread_2./n");
}
return;
}
线程一的线程函数一结束就自动释放资源,线程二就得等到pthread_join来释放系统资源
原文:http://blog.csdn.net/wtz1985/archive/2009/01/16/3798017.aspx
- linux 线程学习(二)属性设置
- Linux 线程设置属性
- linux线程属性设置
- linux线程属性的设置(转)
- linux多线程学习(三)——线程属性设置。
- linux多线程学习(三)——线程属性设置
- linux多线程学习(三)——线程属性设置
- linux多线程学习(三)——线程属性设置。
- linux多线程学习(三)——线程属性设置。
- linux多线程学习(三)——线程属性设置
- linux多线程学习(三)——线程属性设置
- linux多线程学习(三)——线程属性设置
- Linux学习(二十一):线程
- Linux多线程编程(二)——线程属性
- Linux线程属性及优先级设置分类
- Linux线程属性及优先级设置
- Linux线程属性及优先级设置
- Linux创建线程的属性设置
- C与C++中结构体的比较
- javascript实现划词标记划词搜索功能修正版,兼容IE及FF
- 不知道这些你就等于没有学过英语
- 二级联动
- 解决FF中JS的时间错误
- linux 线程学习(二)属性设置
- PHP 正则表达式 (preg_match)
- Android 启动init.rc 中mount 分区
- 网页设计中需要注意的WEB安全色谱
- Flex编码随笔
- Linux 进程地址空间1_数据结构和接口
- cetia4 1.1文档-2.9 Separating Methods by Request Type
- .NET委托:一个C#睡前故事
- MSFlexGrid控件属性及使用方法