在多核上使用多线程

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;  
}  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值