我的应用程序创建了一个帮助程序pthread,我需要以比主线程更高的优先级运行。
我试图像这样设置创建线程的优先级:
struct sched_param param;
pthread_attr_t tattr;
pthread_attr_init(&tattr);
pthread_attr_getschedparam(&tattr, ¶m);
param.sched_priority = sched_get_priority_max(SCHED_RR);
pthread_attr_setschedparam(&tattr, ¶m);
pthread_create(&helper_thread, &tattr, helper_main, NULL);
但是pthread_attr_setschedparam
调用正在返回EINVAL。
我不确定我在这里做错了什么。这甚至是正确的一般方法吗?
我真的不关心它是如何完成的我只需要新线程的优先级高于原始线程。
答案 0 :(得分:4)
在默认调度策略(SCHED_OTHER
)下设置优先级无效。如果要使用SCHED_RR
优先级,则需要切换到SCHED_RR
策略:
pthread_attr_setschedpolicy(&tattr, SCHED_RR);
您也不应该将其设置为最大优先级 - 如果您只是希望它的优先级高于主线程,则优先级为1就足够了。 (如果你不是root用户,你可能会发现设置最高优先级失败了EPERM
。