我通过pthread_attr_setschedpolicy使用SCHED_FIFO在Linux上运行应用程序。
我的理解是pthread_attr_setschedparam()应该允许在线程启动之前在线程属性结构上设置线程优先级,并且Posix需要至少支持32个级别。
确实在跑步时:
sched_get_priority_max(SCHED_FIFO) = 99
sched_get_priority_min(SCHED_FIFO) = 1
使用以下命令在pthread_create之前设置线程优先级:
pthread_attr_setinheritsched(&thread_attr,PTHREAD_EXPLICIT_SCHED))
pthread_attr_setschedparam(&thread_attr)
如果我询问它
pthread_attr_t thread_attr;
struct sched_param s_param;
int res = pthread_getattr_np(channel_data_p->thread, &thread_attr);
assert(res == 0);
res = pthread_attr_getschedparam (&thread_attr, &s_param);
assert(res == 0);
log_write("thread %d, priority = %d",threadId,s_param.sched_priority);
我看到了预期的优先级。 但是,我不清楚如何使用ps -o,top -H或查看/ proc来显示pthreads优先级 或者如何将PR值和NI之类的Linux值(如果它们是在-H之下观察的正确字段)重新关联到posix优先级。
我无意动态地搞乱优先事项,所以这更符合学术兴趣。
答案 0 :(得分:0)
pthreads优先级直接映射到Linux线程/进程优先级。
本文很好地描述了调度程序(来自书籍Linux Kernel Development):
http://www.informit.com/articles/article.aspx?p=101760&seqNum=2