线程属性_实时调度

1.pthread_attr_init(pthread_attr_t attr)和pthread_attr_destroy(pthread_attr_t attr)函数.pthread_attr_setdetachstate(pthread_attr_t  attr,int detachstate);pthread_attr_setdetachstate(pthread_attr_t attr, int *detachstate);

头文件:#include<pthread.h> 原型:int pthread_attr_init(pthread_attr_t *attr); int pthread_attr_destroy(pthread_attr_t  *attr); pthread_attr_init函数的作用初始化一个线程对象的属性,需要用pthread_attr_destroy函数对其去除初始化. 函数返回值:返回0,表示函数初始化对象成功,失败返回错误代码. 参数说明:指向一个线程属性结构的指针,结构中的元素分别对应着新线程的运行属性。属性对象主要包括是否绑定、是否分离、堆栈地址和大小、优先级等。默认属性为非绑定、非分离、默认1MB堆栈、与父进程有相同优先级。 创建一个脱离线程:  

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>

const char message[]="hello,linux";
int thread_finished=0;
void my_err(const char *err_string,int line)
{
	fprintf(stderr,"line:%d",line);
	exit(1);
}
void thread_function(void *arg)
{
	pthread_t newthid;
	newthid=pthread_self();
	printf("我是新线程,ID = %u,argument is:%s\n",(unsigned)newthid,(char *)arg);
	sleep(3);
	printf("新线程结束!\n");
	thread_finished=1;
}
int main(int argc,char *argv[])
{
	int ret;
	pthread_t thid;
	pthread_attr_t attr;
	ret=pthread_attr_init(&attr);
	if(ret!=0)
	{
		my_err("init",__LINE__);
	}
	ret=pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
	if(ret!=0)
	{
		my_err("set",__LINE__);
	}
	ret=pthread_create(&thid,&attr,(void *)&thread_function,(void *)message);
	if(ret!=0)
	{
		my_err("create",__LINE__);
	}
	pthread_attr_destroy(&attr);  //销毁线程属性结构,它在重新初始化之前不能重新使用
	while(!thread_finished)
	{
		printf("主线程等待其它线程结束!\n");
	
	sleep(1);
	}
	printf("其它线程结束!\n");
	return 0;
}

结果:

yang@liu:~/syc/第八章$ ./pthreadgetsetduoli 
主线程等待其它线程结束!
我是新线程,ID = 3437819648,argument is:hello,linux
主线程等待其它线程结束!
主线程等待其它线程结束!
新线程结束!
其它线程结束!

2.int pthread_attr_getschedpolicy(pthread_attr_t *attr,int *policy)和int pthread_attr_setschedpolicy(pthread_attr_t *attr,int policy);  函数pthread_attr_setschedpolicypthread_attr_getschedpolicy分别用来设置和得到线程的调度策略。 3, 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 sched_get_priority_max(int policy); int sched_get_priority_min(int policy);  

你可能感兴趣的:(线程属性_实时调度)