【问题标题】:Usage of scheduling policy flags SCHED_BATCH or SCHED_IDLE gives error使用调度策略标志 SCHED_BATCH 或 SCHED_IDLE 会出错
【发布时间】:2017-01-24 17:10:05
【问题描述】:

我正在尝试使用sched_setscheduler() 来设置给定进程的调度策略。根据其man page,可用标志为SCHED_FIFO,SCHED_RR,SCHED_OTHER,SCHED_BATCH,SCHED_IDLE

除了SCHED_BATCHSCHED_IDLE,我可以使用所有的标志并成功编译我的程序。但是,使用SCHED_BATCH,我得到了

error: ‘SCHED_BATCH’ undeclared (first use in this function)
sched_setscheduler(getpid(),SCHED_BATCH,&param);

说明我的问题的示例代码是:

#include<stdio.h>
#include<unistd.h>
#include<sched.h>
#include<time.h>
#include<stdlib.h>
#include<sys/types.h>
int main()
{
    struct sched_param p;
    p.sched_priority=0;
    sched_setscheduler(getpid(),SCHED_BATCH,&p);
    return 0;
}

如手册页所述,我创建了一个 typr sched_param 的对象,设置其适当的 sched_priority 值,并将其传递给函数。

我的 linux 内核版本是 4.4.40,我使用的是 Ubuntu 14.04.5 LTS。我的 gcc 版本是 6.2.0。

我该如何解决这个问题?

【问题讨论】:

    标签: c linux operating-system scheduling


    【解决方案1】:

    SCHED_BATCHSCHED_IDLE 是特定于 Linux 的,不是 POSIX 标准的一部分。

    除非您定义_GNU_SOURCE,否则Glibc 不会公开它们。所以,做:

    #define _GNU_SOURCE
    

    在包含标题之前。

    【讨论】:

    • 谢谢!那行得通。您能否指点我一些参考资料,以便我阅读更多相关信息?
    • 您可以查看 POSIX 文档here。 AFAIC,_GNU_SOURCE 启用的附加功能/扩展没有很好地记录。它主要在各个手册页中找到。
    猜你喜欢
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2021-04-19
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多