2017-05-08 53 views
0

我有一个应用程序在Linux上使用SCHED_FIFO通过pthread_attr_setschedpolicy运行。在linux下,pthread优先级与lwp优先级有什么关系?

我的理解是,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显示pthreads优先级,或者查看/ proc 或如何将PR值和NI等Linux值相关联(如果它们是正确的字段, H)回到posix优先权。

我不打算动态地优先考虑优先级,所以这更受学术界的关注。

+0

当我问这个问题时,我忘记使用“pthread_attr_setinheritsched(&thread_attr,PTHREAD_EXPLICIT_SCHED))”的代码中存在一个错误,这意味着优先级没有效果。 –

回答