1、怎么知道自己的计算机上的CPU是几核的?
打开电脑的设备管理器,在处理器的位置有如图:
可以看出我现在的电脑的CPU是双核的。
或者在程序中使用:
SYSTEM_INFO SystemInfo;
GetSystemInfo(&SystemInfo);
SystemInfo.dwNumberOfProcessors可以查看现在电脑上的CPU是几核的。
2、怎么绑定线程到多核上
CPU亲缘性就是可以设置那个线程在那个核上运行。
DWORD_PTR SetThreadAffinityMask (
HANDLE hThread, // handle to thread
DWORD_PTR dwThreadAffinityMask // thread affinity mask
);
dwThreadAffinityMask为CPU序号的或运算值:1(0001)代表只运行在CPU1,2(0010)代表只运行在CPU2,3(0011)代表可以运行在CPU1和CPU2,以此类推。
下面是我程序中的一小部分:由于我的CPU是双核的,我自己人为的设定创建的双数线程在核1上运行,创建的单数线程在核2上运行。
while (i < THREAD_NUM)
{
handle[i] = (HANDLE)CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)THREADFUNC, &i, 0, NULL);
SetThreadAffinityMask(handle[i], i%2+1);
WaitForSingleObject(g_hThreadParameter, INFINITE);//等待信号量>0
++i;
}