| 发表于: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死掉,机器跟死机没有什么两样 也就是高优先级线程永远无法强占低优先级线程.... 为什么????? |
|
|
|
|