我建了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实际上是在轮流运行的,真是奇怪了,那位大侠指点指点下小弟吧,先谢谢你了!!!