您的位置:程序门 -> linux/unix社区 -> 内核及驱动程序研究区



*****sched_fifo线程的无法抢占问题,我给100分,不够的话,另开贴送分 *****


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


*****sched_fifo线程的无法抢占问题,我给100分,不够的话,另开贴送分 *****
发表于:2007-05-24 10:16:23 楼主
fifo线程似乎不支持抢占,低优先级线程一旦运行起来,如果它不主动释放cpu,高优先级任务就一直得不到执行。下面是我的代码    
 
(kernel     is     :uclinux2.6)    
 
     
 
void*     thd1(void*     lpparam)//线程1    
 
{    
 
                          sleep(1);//休眠使的main可以有机会创建线程2    
 
                          while(1);    
 
}    
 
     
 
void*     thd2(void*     lpparam)//线程2    
 
{    
 
                          sleep(3);//等线程1运行2秒后,再抢占cpu    
 
                          while(1){    
 
                                                      printf(“thd2     preempt!”);             //这是理想输出的结果    
                          }    
 
}    
 
     
 
int     create_fifo_thd(void(*     routine)(void*     param),int     dwpriority)    
 
{    
 
                          pthread_attr_t     attr;    
 
                          pthread_attr_init(&attr);    
 
                          pthread_attr_setschedpolicy(&attr,sched_fifo);    
 
                          pthread_attr_setdetachstate(&attr,pthread_create_detached);    
 
                          struct     sched_param     sch_param;    
 
                          sch_param.sched_priority     =     dwpriority;    
 
                          pthread_attr_setschedparam(&attr,&sch_param);    
 
                          pthread_t     pid     =     0;    
 
                          pthread_create(&pid,&attr,routine,0);    
 
                          pthread_attr_destroy(&attr);    
 
                          return     pid;    
 
}    
 
     
 
int     main()    
 
{    
 
                          int     ret     =     0;    
 
                          ret     =     create_fifo_thd(thd1,11);//低优先级(优先级换成12,运行效果相同)    
                          if(0     ==     ret)return     0;    
 
                          ret     =     create_fifo_thd(thd2,12);//高优先级(优先级换成11,运行效果相同)    
                          if(0     ==     ret)return     0;    
 
                          printf(“pthread_create     ok!\n”);    
 
                          while(1)sleep(1);    
 
}    
 
运行结果:    
pthread_create     ok!    
然后shell死掉,机器跟死机没有什么两样    
 
也就是高优先级线程永远无法强占低优先级线程....    
 
为什么?????
发表于:2007-05-27 14:45:381楼 得分:0
帮顶
学过点操作系统,不太明白,单纯的先进先出是不支持抢占,也没有优先级的说法了,只有先来后到
发表于:2007-05-27 19:55:272楼 得分:0
fifo模式线程好像是只有其结束运行后才能选择其他线程执行(根据优先级顺序),试一下循环模式吧
发表于:2007-05-31 16:18:473楼 得分:0
帮顶


快速检索

最新资讯
热门点击