我很难理解setscheduler函数中的sched_priority角色。
我使用的是linux 2.4.X,文档中写道:
Valid priorities for SCHED_OTHER is 0, Valid priorities for SCHED_RR\FIFO are 1...MAX_USER_RT_PRIO-1
但是,我记得rt进程的优先级是0-99,SCHED_OTHER的优先级是100-139,所以...我错过了什么?struct sched_param中的sched_priority指的是什么?
我使用pthread_create()在我的Linux应用程序中创建了一个线程。我想让这个线程以非常低的优先级运行,因为在同一个应用程序中有一些实时线程在运行。下面是线程函数本身中的代码:
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
/* Trying to set lowest priority possible for this thread */
调用pthread_create函数后,我将收到下一条消息:
W/libc (26409):pthread_create sched_setscheduler调用失败:不允许操作
用于创建线程的代码是:
pthread_attr_t threadAttr;
int ret = pthread_attr_init(&threadAttr);
//code to check ret - it's 0
size_t guard_size = 0;
pthread_attr_getguardsize(&threadAttr, &guard_size);
ret
在用于线程调度的POSIX api中,我们可以让不同的线程采用不同的调度策略。 示例: pthread_attr_setschedpolicy (&attr, SCHED_FIFO); // set policy first in first out
pthread_create(&tid1,&attr,runner,NULL); // create thread with first in first out
pthread_attr_setschedpolicy (&attr, SCHED_RR); // set policy round robin