thread 的 优先级 调度 问题 ??

我建了2个不同优先级的 thread,
用下面的部分程序设置了2个不同的优先级:
res = pthread_attr_setschedpolicy(&thread_attr, SCHED_OTHER );
res = pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED);
max_priority = sched_get_priority_max(SCHED_OTHER);//255
min_priority = sched_get_priority_min(SCHED_OTHER);//1
scheduling_value.sched_priority = 100+min_priority;
res = pthread_attr_setschedparam(&thread_attr, &scheduling_value);

thread程序
void *thread_task13_high_priority(void *arg){
while(1){
gvar.task13++;
}
pthread_exit(NULL);
}
//==============================================void *thread_task14_low_priority(void *arg){
while(1){
gvar.task14++;
}
pthread_exit(NULL);
}


在主程序中:
for(;;){
printf("\nH = %lu\nL = %lu\n",gvar.task13,gvar.task14);
sleep(1);
}

实际测试,发现:主程序打印出来的数,2个计数器的值差不多,就是说,2个thread都在运行。按理说,高优先级的thread应该一直运行,没有放弃CPU,所以,低优先级的thread应该没有时间运行才对,但是,实际测试又是2个都在允许,真是奇怪了,而且,我用QNX中带的trace工具,看了追踪到的运行图形,发现,这2个thread实际上是在轮流运行的,真是奇怪了,那位大侠指点指点下小弟吧,先谢谢你了!!!

按你的程序我在QNX6.2.1下测试了一下,max_priority=63,min_priority=1,这样min_priority+100就超出了范围,不知原因是否在于此

试试加一句这个:

res = pthread_attr_setinheritsched(&thread_attr, PTHREAD_EXPLICIT_SCHED);

如果不行,把你的整个程序贴出来吧。

还要记得主进程的优先级要足够高。否则没有CPU时间可以打印。:smiley:

终于对了,xtang说的对,增加那句,而且,原来的顺序也不对,现在对了。谢谢了!!!

我用的是 win2000+qnx6.3 == vmware5+qnx6.3

可以得到你的源程序吗?
我在学习线程 找不到什么抢占的例程 我想好好学习一下你的程序
可以给我发一份吗?
我的E-mail:only-919@163.com