【发布时间】: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