【发布时间】:2013-05-09 03:40:53
【问题描述】:
有时,当我运行这个简单的程序时
#include <Windows.h>
DWORD WINAPI ThreadStart(LPVOID)
{
for (;;) { }
return 0;
}
int _tmain()
{
SetPriorityClass(GetCurrentProcess(), BELOW_NORMAL_PRIORITY_CLASS);
SYSTEM_INFO si;
GetSystemInfo(&si);
for (DWORD i = si.dwNumberOfProcessors * 2; i > 0; i--)
{ CloseHandle(CreateThread(NULL, 0, &ThreadStart, NULL, 0, NULL)); }
Sleep(INFINITE);
}
我经常观察到不公平的线程调度,例如:
并不是每次运行都不公平,但是当它时,它在应用程序的整个生命周期中都保持不公平。
为什么会发生这种情况,避免这种情况的正确方法是什么?
【问题讨论】:
-
你的CPU是什么模式?它实际上是四核,还是具有超线程的双核?
-
另外,什么版本的 Windows。了解这一点也很重要。
-
@selbie:2 核 HT(Core i5,笔记本电脑),Windows 8 x64。
-
使用线程和处理器关联函数(例如 SetThreadIdealProcessor、SetThreadAffinityMask、SetProcessAffinityMask)会影响什么吗?
-
@HarryJohnston: Process Hacker!
标签: c windows winapi cpu scheduler