pthread优先级如何与linux下的lwp优先级相关?

时间:2017-05-08 18:00:54

标签: linux multithreading pthreads

我通过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优先级。

我无意动态地搞乱优先事项,所以这更符合学术兴趣。

1 个答案:

答案 0 :(得分:0)

pthreads优先级直接映射到Linux线程/进程优先级。

本文很好地描述了调度程序(来自书籍Linux Kernel Development):

http://www.informit.com/articles/article.aspx?p=101760&seqNum=2

如前所述here linux现在调度线程,而不是使用线程到进程的1:1映射的进程。