【问题标题】:Does a processor affinity set by SetThreadAffinityMask also apply to children threads?SetThreadAffinityMask 设置的处理器亲和性是否也适用于子线程?
【发布时间】:2020-01-28 02:07:05
【问题描述】:

我有一个使用许多线程的应用程序,其中一个线程比其他线程更需要时间。我已经尝试过使用优先级,但发现 Windows 并不总是按照我想要的程度尊重优先级,并且有时允许次优先级线程长时间(50+ 毫秒)阻塞我的关键线程。为了解决这个问题,我正在考虑为每个线程设置一个处理器亲和性,以限制非关键线程,这样它们就不能使用某些核心(比如核心 #1 和 #2),而关键线程将始终拥有这些核心(#1 和 #2)可用。

我的问题是,如果我通过SetThreadAffinityMask() 为我的入口点线程设置了处理器关联掩码,那么由该初始线程创建的后续线程会继承关联掩码吗?还是每次在整个系统中生成线程时都需要手动设置亲和性?

【问题讨论】:

  • 从文档看来,亲和力掩码似乎不是从线程继承的。但看起来SetProcessAffinityMask 对你有用吗?
  • @SergeyA "看起来 SetProcessAffinityMask 会为你做些什么?" - 如果他只想要核心 1-2 上的一些线程,而核心 3 上的其余线程则不会+。为每个线程调用 SetThreadAffinityMask() 将是处理该问题的正确方法。

标签: c++ multithreading windows-7 windows-10 affinity


【解决方案1】:

我可以确认在 Windows 10 上使用带有 VS2015 的 std::thread 创建线程时不会继承线程关联性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-19
    • 1970-01-01
    • 2015-03-13
    • 2014-07-30
    • 2013-04-25
    • 1970-01-01
    • 2019-10-22
    • 1970-01-01
    相关资源
    最近更新 更多