【android 提高线程优先级】

具体修改

#include <sched.h>
#include <sys/time.h>
#include <sys/resource.h>



struct sched_param sched_p;
::sched_getparam(0, &sched_p);

// set policy/priority
int policy = SCHED_OTHER; //默认的调度策略
int priority = -15; //-20最高优先级,0就是默认

sched_p.sched_priority = priority; // Note: "priority" is nice value.
::sched_setscheduler(0, policy, &sched_p);
::setpriority(PRIO_PROCESS, 0, priority);

知识扫盲:

sched_setscheduler

是一个Linux系统调用(System Call),用于设置进程或线程的调度策略和优先级。
该系统调用允许修改指定进程或线程的调度策略、优先级和CPU亲和力(即指定任务只在特定CPU运行)。

在Linux中支持多种调度策略,如先进先出 (FIFO)、时间片轮转 (RR) 和实时 (SCHED_RR)等,可以通过调用该系统调用来设置所需的调度策略。

函数的原型如下:

#include <sched.h>
 
int sched_setscheduler(pid_t pid, int policy, const struct sched_param *param);

如果sched_setscheduler的第一个参数pid被设置为0,则该函数将应用于调用线程本身。

在这种情况下,调用线程的调度策略和优先级将被修改为指定的参数。

因此,如果您想要更改当前线程的调度策略,可以这样调用sched_setscheduler:

#include <pthread.h>
#include <sched.h>
 
int result;
struct sched_param param;
param.sched_priority = 99;
 
result = pthread_setschedparam(pthread_self(), SCHED_FIFO, &param);
if (result != 0) {
    // 错误处理代码
}

在这里,pthread_self()函数返回当前线程的线程ID,该线程ID可以作为可用于调用sched_setscheduler的参数。

如果sched_setscheduler的第一个参数被设置为0,它将检索当前线程并将该线程的调度策略设置为指定的值。请注意,此方法需要你的线程运行sudo以获得root权限。

prctl

是一个 Linux 系统调用,可用于操作进程的运行状态或行为。该函数接受两个参数:option 和 arg2,其原型定义如下:

#include <sys/prctl.h>
 
int prctl(int option, unsigned long arg2, unsigned long arg3,
          unsigned long arg4, unsigned long arg5);

其中,option参数表示要执行的操作类型,arg2是一个操作特定的参数。函数返回0表示执行成功,否则返回一个负值并且设置 errno 来指明错误的原因。

prctl 函数可以用于多种用途,例如:

1.修改进程的名称(通过 PR_SET_NAME 选项)
2.指定子进程死后是否变成 zombie 进程(通过 PR_SET_CHILD_SUBREAPER 选项)
3.设置进程的 seccomp 模式(通过 PR_SET_SECCOMP 选项)
4.设置进程的 UID、GID、启动时间戳等信息(通过 PR_SET_KEEPCAPS 选项)

需要注意的是,prctl 函数操作系统的某些行为,使用不当会导致系统异常或数据损坏等问题,可能会影响系统的稳定性和安全性。在使用prctl函数时,请确保您已经了解该函数的正确用法和限制,并按照文档提供的说明操作。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值