gpt4 book ai didi

c - sched_setscheduler 是针对所有线程还是主线程?

转载 作者:太空狗 更新时间:2023-10-29 11:07:46 25 4
gpt4 key购买 nike

我有以下源,它喜欢 SCHED_RR 优先级 90:

int main(int argc, char** argv)
{
const char *sched_policy[] = {
"SCHED_OTHER",
"SCHED_FIFO",
"SCHED_RR",
"SCHED_BATCH"
};
struct sched_param sp = {
.sched_priority = 90
};
pid_t pid = getpid();
printf("pid=(%d)\n",pid);
sched_setscheduler(pid, SCHED_RR, &sp);
printf("Scheduler Policy is %s.\n", sched_policy[sched_getscheduler(pid)]);

pthread_t tid ;
pthread_create(&tid , NULL, Thread1 , (void*)(long)3);
pthread_create(&tid , NULL, Thread2 , (void*)(long)3);
pthread_create(&tid , NULL, Thread3 , (void*)(long)3);
while(1)
sleep(100);
}

在 shell "top"时,我可以看到该进程有 PR 和 -91 ,看起来它有效,据我所知,在 Linux 中,thread1 和 thread2 以及 thread3 是不同的任务从主线程,他们只是共享相同的虚拟内存,我想知道在此测试中,我是否需要添加

pthread_setschedparam(pthread_self(), SCHED_RR, &sp);

对于所有的thread1,thread2 和thread3 这样所有这3个都可以被调度与 SCHED_RR ?!或者我不需要那样做?!我怎样才能观察到线程 1、线程 2 和线程 3 线程是 SCHED_RR 还是 SCHED_OTHER?!

编辑:

sudo chrt -v -r 90 ./xxx.exe 

将看到:

pid 7187's new scheduling policy: SCHED_RR
pid 7187's new scheduling priority: 90

我如何确定这仅适用于主线程?!或 pid 7187 中的所有线程是 SCHED_RR 政策?!再一次,如何观察它?!

最佳答案

在创建任何新线程之前,您应该检查(并在需要时设置)调度程序继承属性。

int pthread_attr_getinheritsched(const pthread_attr_t *attr, int *inheritsched);

int pthread_attr_setinheritsched(pthread_attr_t *attr, int inheritsched);

pthread_attr_getinheritsched() 将在 inheritsched 指向的变量中存储两个可能值之一:

  • PTHREAD_INHERIT_SCHED - Threads that are created using attr
    inherit scheduling attributes from the creating thread; the scheduling attributes in attr are ignored.

  • PTHREAD_EXPLICIT_SCHED - Threads that are created using attr take their scheduling attributes from the values specified by the attributes object.

如果您希望每个新创建的线程都继承调用任务的调度程序属性,您应该设置 PTHREAD_INHERIT_SCHED(如果尚未设置)。

另请注意:

The default setting of the inherit-scheduler attribute in a newly initialized thread attributes object is PTHREAD_INHERIT_SCHED

引用资料

$ man pthread_setschedparam
$ man pthread_attr_setinheritsched
  • (引用自 Linux 手册页项目 3.74 版的部分内容。)

关于c - sched_setscheduler 是针对所有线程还是主线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38193214/

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