指示win32线程在单个处理器核心上运行

时间:2012-10-26 12:20:19

标签: windows multithreading winapi

我有一个测试程序,如果它可以依赖于在Windows上按严格优先级顺序调度的线程,那么它会简单得多。我看到一个低优先级的线程与更高优先级的线程一起运行,并想知道是否发生了这种情况,因为不同的线程正在不同的处理器核心上进行调度。

有没有办法强制进程中的所有Win32线程使用单个处理器核心? SetThreadAffinityMask看起来可能很有趣,但其文档并不完全清楚,我不确定如何使用它。

2 个答案:

答案 0 :(得分:5)

SetThreadAffinityMask函数:为指定的线程设置处理器关联掩码。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms686247%28v=vs.85%29.aspx

SetThreadAffinityMask(GetCurrentThread(), (1 << CoreNumber));

将当前线程与'CoreNumber'变量

的亲缘关系设置为

答案 1 :(得分:0)

即使你强制所有线程都放在一个虚拟处理器上,你仍然会经常运行低优先级线程,等待它们的高优先级线程(priority inversion)。一旦一个线程由windows-scheduler调度,它就会一直运行,直到它被抢占或休眠(或其他一些睡眠诱导系统调用)。您将不得不更改应用程序的设计,以便它不再假定没有低优先级的线程运行,而高优先级的线程也可以运行。