0

我编写了一个测试程序来绑定 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;
}

没有 printf() 的 CPU Rate Pic

使用 printf() 的 CPU 速率图片

当然,正确的结果应该像图片一个。但是如果我在线程函数中添加 printf() 函数会发生什么?有什么我不知道的技巧吗?谢谢...

4

1 回答 1

1

我认为亲和力确实有效,但这里的问题是printf()写入一些文本(到控制台?)并同步等待要写入的文本。

现在,这个文本必须打印在某个地方,并且某个地方负责不同的线程/进程,它甚至可以是对磁盘或网络的真正 I/O。这就是您看到 CPU3 的 CPU 使用率下降的原因:它处于空闲状态,等待该 I/O 完成。

于 2015-12-09T14:12:58.390 回答