|
|
我在linux下编写多线程程序,并为每个线程设置了不同的优先级,但线程执行却始终是按照创建的先后顺序执行的。为什么高优先级不能先执行完毕呢?
程序如下:
/* example.c*/
//创建多线程,设置线程属性,优先级及互斥量的设定。
#include <errno.h>
#include <pthread.h>
#include <sched.h>
#include <stdio.h>
#include <unistd.h>
#include <asm/unistd.h>
#include <linux/unistd.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <stdlib.h>
static inline _syscall0(int ,gettid);
pthread_mutex_t mutex;
void thread(int *counter)
{
int i,j;
float x,y;
x=1.0;
y=2.0;
for(i=0;i< 10;i++)
{
printf("This is a %d pthread.counter is :%d\n",gettid(), counter);
for (j=0;j<10000000;j++) //延时
{
x*y;
}
}
printf("child end\n ");
}
int create_rt_thread( pthread_t *id ,void *func , void *func_para , int
prior )
{
int ret;
pthread_attr_t attr;
/*初始化属性值,均设为默认值*/
pthread_attr_init(&attr);
pthread_attr_setscope(&attr, PTHREAD_SCOPE_PROCESS);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
//设置优先级
struct sched_param param;
int newprio=prior;
pthread_attr_init(&attr);
pthread_attr_getschedparam(&attr, ¶m);
param.sched_priority=prior;
// printf(" %d\n",param.sched_priority);
//param.rt_priority=newprio;
pthread_attr_setschedparam(&attr, ¶m);
// pthread_attr_setsinheritsched(&attr,PTHREAD_EXPLICIT_SCHED);
//pthread_attr_setschedpolicy(&attr,SCHED_RR);
//定义互斥量
//pthread_mutex_init (&mutex,NULL);
ret=pthread_create(id,&attr,(void *) thread,func_para);
param.sched_priority=prior;
pthread_setschedparam(*id, SCHED_RR, ¶m);
if(ret!=0)
{
printf ("Create pthread error!\n");
exit (1);
}
// pthread_join(id,NULL);
return ret;
}
int main(void)
{
pthread_t id[10];
int ret,i;
struct sched_param param;
pthread_setschedparam(pthread_self(), SCHED_RR, ¶m);
for(i=0;i<10;i++)
{
ret=create_rt_thread(&id,(void *)thread,(void *)i , i*3+2);
}
for (i=0;i<10;i++)
{
pthread_join(id,NULL);
}
printf(" main end ");
return (0);
} |
|