Jonathan, On 9/25/07, Jonathan Walsh <jwalsh@xxxxxxxxxxxx> wrote: > I am attempting to set up a program that has 3 threads. The first > thread is a receiver process that listens on a UDP port and puts a > struct on a one of two queues depending on a flag in the packet. The > other two threads block on a pthread_cond_t (that is signaled when a > message is added to their queue), then take messages off their > corresponding queues and perform a fixed amount of computation. I am > setting thread priorities as follows: > > pthread_t tid_processor; > struct sched_param sparam; > pthread_attr_t tattr; > pthread_attr_init(&tattr); > pthread_attr_getschedparam(&tattr, &sparam); > sparam.sched_priority = SOME_THREAD_PRIORITY; > pthread_attr_setschedpolicy(&tattr, SCHED_FIFO); > pthread_attr_setschedparam(&tattr, &sparam)); > pthread_create(&tid, &tattr, &thread_function, NULL ); > > I set the receiver thread to the highest priority, then one of the > processor threads is higher than the other. > > I have two questions about this situation: > > 1) Are pthread priorities reversed from Linux priorities. In other > words, does a lower number mean a higher priority? No. SCHED_FIFO or SCHED_RR have an allowed range of 1 to 99 with lower numbers representing lower thread priorities. > 2) Will a higher priority thread preempt the execution of a lower > priority thread? Normally, this is the true for SCHED_FIFO, where threads run until preempted by a thread of higher priority, or until blocked. However, Linux limits the scheduling policies SCHED_RR and SCHED_FIFO to processes with superuser privileges. So, unless your program runs with elevated privileges SCHED_OTHER will be selected by default which is "based on the nice level ... and increased for each time quantum the process [i.e. thread] is unable to run." according to sched_setscheduler(2). (Note, the pthread_set_schedparam() call maps to the sched_setscheduler() call. An operation that requires root privileges.) For SCHED_OTHER the allowed mininmum and maximum priorities are 0. Therefore it is not possible to change the priority. Hope that sheds some light on your questions \Steve - To unsubscribe from this list: send the line "unsubscribe linux-c-programming" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html