gpt4 book ai didi

c++ - 为线程设置新优先级时不允许操作

转载 作者:太空狗 更新时间:2023-10-29 20:16:06 27 4
gpt4 key购买 nike

我创建了两个线程。默认情况下,它们的优先级为 0 我可以看到使用pthread_getschedparam 然后我尝试增加它们的优先级,分别说 23。但是当我尝试这样做时我得到了一个错误

     error setting priority for T1: (1), Operation not permitted
error setting priority for T2: (1), Operation not permitted

我已经为他们使用了SCHED_RR的调度策略

       int sched = SCHED_RR;

然后执行这个:-

   if (pthread_setschedparam(t1, sched, &t1_param) != 0) 
{
std::cout << "error setting priority for T1: (" << errno << "), " <<
strerror(errno) << std::endl;
}

我无法修改线程优先级的原因是什么,因为 SCHED_RR 的优先级在 199 的范围内。

最佳答案

免责声明:我不是 Linux 安全专家,以下建议可能会危及或损坏您的计算机。

在最近的 Linux 版本中,存在资源限制,RLIMIT_RTPRIO , 它指定您可以使用的最大实时优先级。您可以从 shell 中检查:

> ulimit -r
0

在我的 Ubuntu 版本(可能还有你的)上也有一个硬限制为零,所以你不能简单地使用 ulimitsetrlimit提出这个。提高硬限制的一种方法是向 /etc/security/limits.conf 添加一行像这样(将 <username> 替换为您的用户名):

<username> hard rtprio 99

那么你应该可以使用ulimit (来自 shell)或 setrlimit (从您的程序)将软限制设置为您需要的优先级;或者,您可以通过向 limits.conf 添加第二行来自动设置它, 替换 hardsoft .

> ulimit -Hr # show hard limit
99
> ulimit -r
0
> ulimit -Sr 1 # set soft limit
> ulimit -r
1

一定要小心运行实时优先级的程序;如果它开始行为不端,它可能会杀死系统。

关于c++ - 为线程设置新优先级时不允许操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10704983/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com