c++ - 从创建线程设置线程的 "nice level"?

标签 c++ linux pthreads scheduling

我正在研究应用程序中的线程优先级。有一个使用 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/

相关文章:

C程序不允许超过n个线程同时执行函数f

c++ - 从不兼容的指针类型分配,同时在框中添加缓冲区文本

Linux shell 脚本查找和重命名文件以删除后缀?

c++ - pthread_cond_timedwait 立即返回 ETIMEDOUT

linux - 如何添加一个 cron 作业来运行 php 脚本

linux - linux 和 windows 之间行尾差异的 Git 问题

c - 单个文件的 undefined reference

c++ - 为什么我们甚至需要 "delete[]"运算符?

c++ - 未初始化 auto_ptr 时 get() 是否可靠?

java - 从 C++ 调用 java 代码 : exception java. lang.NoSuchMethodError