我正在研究应用程序中的线程优先级。有一个使用 SCHED_RR
调度的实时线程。我使用 pthread_setschedparam
设置此策略及其优先级。 pthread_setschedparam
将线程 ID 作为第一个参数,因此在使用 boost::thread
创建线程后,我可以设置其实时优先级。
然而,另一个线程应该有一定的nice-level,但没有实时调度。我可以用
pid_t tid;
tid = syscall(SYS_gettid);
int ret = setpriority(PRIO_PROCESS, tid, nicelevel);
将它的 nice level 设置为 ǹicelevel
,但这只有在我修改线程函数以包含上面的行时才有效。有没有办法从创建线程的方法中设置 nice 级别?
谢谢!
最佳答案
boost::thread类公开了一个公共(public) native_handle()
方法。在基于 pthreads 的实现中,此方法可能返回一个tid
(它也可能返回一个pthread_t *
,取决于 handle
在这种特殊情况下的含义)。
如果它确实返回一个 tid
,使用它应该可以解决您的问题。否则,您可能必须将 gettid()
返回的值从线程函数中继到全局范围,如 this answer建议。
关于c++ - 从创建线程设置线程的 "nice level"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7753567/