我编写了一个测试程序来绑定CPU上的线程。这是我的测试代码:
#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;
}
当然,正确的结果应该像pic one。但是如果我在线程函数中添加printf()函数会发生什么?有什么技巧我不知道吗?谢谢。 ..
答案 0 :(得分:1)
我认为亲和力确实有效,但问题是printf()
写了一些文本(到控制台?)并同步等待写入文本。
现在,这个文本必须在某处打印,某处负责不同的线程/进程,它甚至可以是磁盘或网络的真正I / O.这就是为什么你看到CPU3的CPU使用率下降的原因:它等待I / O完成空闲。