【问题标题】:Run a thread in a core with lowest priority在优先级最低的核心中运行线程
【发布时间】:2017-12-12 09:48:04
【问题描述】:

在 C++ 中,如何始终在具有最低优先级的核心中运行线程。我们可以使用 sched_getcpu() 来分配一个特定于线程的核心,但是我们如何实现低优先级运行呢?

【问题讨论】:

  • 该函数返回线程正在运行的 CPU 的数量。它没有设置它。操作系统决定你的代码在哪里运行。
  • 我是否遗漏了什么,但在对称多处理器 (SMP) 环境中,所有内核都是平等的并且并行运行,因此没有优先级的概念,即使最终在每个内核上运行的内容需要优先级操作系统?
  • 你无法控制它。您的操作系统进程调度程序正在处理这个问题。但是在 Linux 上,您可以调整调度程序的参数:ibm.com/support/knowledgecenter/en/linuxonibm/liaai.saptuning/…
  • 在我的应用程序中,我有一个后台进程(线程),它必须始终在单核中运行,如果有任何高优先级线程到来,那么它必须等待。
  • @ArunKS 您可以将低优先级分配给您的线程,yield 您的线程,但是仅将这些选项视为系统调度程序的提示

标签: c++ multithreading stdthread


【解决方案1】:

你不能用 std::thread 做到这一点,但你可以获取 native_handle 并使用 pthread 句柄设置 core affinitypriority(查看示例)。

编辑:这是针对 Linux 的,在 Windows 上你会得到一个不同的句柄。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-26
    • 2020-03-22
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多