Hi,
I have come across some strange behaviour of priority base scheduling of threads across linux kernels.
The program below shows that main priority is raised to max = 99. Another thread with priority =30 is created.
void main() { struct sched_param schedparam, getparam, taskschedparam; int policy, status; pthread_attr_t attribs; pthread_t id =pthread_self();
/* Raising main priority to max =99 */ schedparam.__sched_priority =sched_get_priority_max( SCHED_FIFO ); pthread_setschedparam(id, SCHED_FIFO, &schedparam); pthread_getschedparam(id,&policy , &getparam); printf("\n main : priority = %d, policy = %d", getparam.__sched_priority, policy);
/* First Assign default attributes for the thread */ pthread_attr_init(&attribs); /*Set stack size as specified by user*/ attribs.__stacksize = 10000; /*set scheduling policy*/ pthread_attr_setschedpolicy(&attribs, SCHED_FIFO); /*Set task priority*/ taskschedparam.__sched_priority = 30; pthread_attr_setschedparam(&attribs, &taskschedparam); status = pthread_create(&firstTask, &attribs, task_fun1, (void*)1 ); printf("\n main :first task = %d,firstTask); fflush(stdout); sleep(10000); } void *task_fun1 ( void *param) { struct sched_param schedparam, getparam ; int policy; pthread_getschedparam(pthread_self(),&policy , &getparam); printf("\n task_fun1: priority = %d, policy = %d", getparam.__sched_priority, policy);fflush(stdout); printf("\n FIRST TASK = %x", firstTask); fflush(stdout); }
Ouputs: Redhat: 7.2 :[CORRECT OUTPUT] main : priority = 99, policy = 1 pthread_create status = 0 main :first task = 1026 Sleeping for 1000 sec task_fun1: priority = 30, policy = 1 FIRST TASK = 402
Redhat: 9.0 main : priority = 99, policy = 1 task_fun1: priority = 0, policy = 0 FIRST TASK = 40838cc0 pthread_create status = 0 main :first task = 1082363072 Sleeping for 1000 sec
Just wondering if there is any inconsistency in the priority scheduling across linux version: linux
2.4.20-8(Redhat 9.0) linux 2.4.7(Redhat 7.2).Has anyone come across this problem earlier? Any solution to overcome it?
Your input will be helpful.
thanks and regards,
-Jyoti