時々、この単純なプログラムを実行すると
#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);
}
次のような不公平なスレッド スケジューリングが常に見られます。
すべての実行で不公平ではありませんが、そうである場合は、アプリケーションの存続期間を通じて不公平なままです。
なぜこれが起こるのですか?それを回避する適切な方法は何ですか?