Я написал тестовую программу для привязки потока к процессору. Вот мой тестовый код:
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
DWORD WINAPI ThreadFunc(LPVOID pM) {
while(1) {
printf("Doesn't work anymore"); //If i add this printf function,the setthreadaffinitymask seems doesn't work anymore.Which u can see from two pictures i post.
}
}
int main()
{
HANDLE h;
DWORD_PTR RetFlag;
h = CreateThread(NULL, 0, ThreadFunc, NULL, 0, NULL);
if((RetFlag = SetThreadAffinityMask(h, 0x08)) == 0)
printf("SetThreadAffinityMask fails\n");
WaitForSingleObject(h, INFINITE);
return 0;
}
И, конечно, правильный результат должен быть похож на рис. Но что будет, если я добавлю функцию printf () в функцию потока? Есть какой-то трюк, которого я не знаю? Спасибо …
Я думаю, что близость работает, но проблема в том, что printf()
записывает некоторый текст (в консоль?) и синхронно ожидает текст для записи.
Теперь этот текст должен быть напечатан где-то, и это где-то отвечает за другой поток / процесс, это может быть даже реальный ввод-вывод на диск или в сеть. Вот почему вы видите снижение загрузки ЦП CPU3: он простаивает в ожидании завершения ввода-вывода.
Других решений пока нет …