我有一个testing程序,如果它可以依赖在Windows上严格按照优先级顺序排列的线程,那么这个testing程序会简单得多。 我看到一个优先级较低的线程和较高优先级的线程一起运行,并怀疑是否发生了这种情况,因为不同的线程正在不同的处理器内核上进行调度
有没有办法强制进程中的所有Win32线程使用单个处理器核心? SetThreadAffinityMask看起来像它可能是有趣的,但其文档不完全清楚,我不知道如何使用它。
SetThreadAffinityMask函数:为指定的线程设置处理器关联掩码。
http://msdn.microsoft.com/en-us/library/windows/desktop/ms686247%28v=vs.85%29.aspx
SetThreadAffinityMask(GetCurrentThread(), (1 << CoreNumber));
将当前线程的关联性设置为“CoreNumber”变量
即使将所有线程强制到一个虚拟处理器上,仍然通常会运行低优先级的线程,并等待高优先级的线程( 优先级反转 )。 一旦一个线程被Windows调度程序调度,它将一直运行,直到它被抢占或睡眠(或其他引起睡眠的系统调用)。 您将不得不更改应用程序的设计,以便不再假定没有低优先级线程运行,同时高优先级线程也可以运行。