指定线程在特定核心
来源:互联网 发布:英语基础自学软件 编辑:程序博客网 时间:2024/04/29 08:24
1原博部分:
转自 http://bukkake.iteye.com/blog/688383
今天遇到这么一个问题,有一个任务分上下行,都是计算复杂型的,如何保证用线程可以让他们运行在双核机器上的不同核心上充分利用CPU?
我当时想了一下,认为线程的分配是操作系统处理的,如果足够精明的话,可以将线程合理分配。不过我回去查了查资料,竟然还真能指定CPU,就是用SetThreadAffinityMask,当然我也看到对此函数的批评,但实际运行效果确实还可以。- #include <windows.h>
- #include <stdio.h>
- #define ThreadCount 2
- DWORD WINAPI func(LPVOID pvoid)
- {
- while(1)
- ;
- return 0;
- }
- int main()
- {
- HANDLE threads[ThreadCount];
- int i;
- for (i = 0; i < ThreadCount; i++)
- {
- threads[i] = CreateThread(NULL, 0, func, NULL, 0, NULL);
- SetThreadAffinityMask(threads[i], 1<<i);
- if (threads[i] == NULL)
- {
- OutputDebugString(L"CreateThread Error!\n");
- exit(1);
- }
- }
- getchar();
- return 0;
- }
根据自己机器不同核心数调整一下常量,就可以观察cpu们依次到达100%了。
有兴趣的话还可以看SetThreadAffinityMask的返回值,其意义是该线程原先的亲缘性,我机器上返回是15,也就是00001111,大致也可以猜出意思是可以在四核上任意分配。
增加部分:
1
DWORD_PTR SetThreadAffinityMask(HANDLE hThread, DWORD_PTR dwThreadAffinityMask);
如果要知道当前线程的句柄,可以通过函数:GetCurrentThread()得到。否则,在创建多线程的时候,也同样可以得到创建的线程的句柄。
第二个参数为mask,可取值为0~2^31(32位)和0~2^63(64位),每一位代表每一个CPU是否使用。
比如,你要指定进程到第0个CPU上,则mask=0×01
第1个CPU:mask=0×02
第2个CPU:mask=0×04 (注意不是0×03)
第3个CPU:mask=0×08
以此类推。
如果要指定多个CPU:
比如第0、1个:mask=0×03
第1、2个:mask=0×06
以此类推。
如果CPU个数不足,则会进行取模操作。比如一共4个CPU,则mask=0×0010则和0×01一样。
0 0
- 指定线程在特定核心
- 线程指定在指定CPU(核心)上执行
- 线程指定在指定CPU(核心)上执行
- 在指定cpu的核心上执行线程
- 多核处理器中,使线程运行在指定CPU核心
- 在特定条件下关闭指定的Activity
- 指定.net程序在特定.net平台编译运行
- 【转】在特定环境中安装指定版本的Docker
- 编写一个在屏幕指定位置输出特定字符和特定颜色的子程序
- java实现在指定目录下的特定文件中查找特定字符串集
- 用python查找在指定目录下特定文件夹下的指定文件
- 设置cpu亲和性---即 绑定特定的进程线程到指定的cpu
- 控制线程在指定CPU上运行
- 在指定的线程接收信号 pthread_sigmask
- android将线程绑定在指定CPU
- android 拍照,存储在指定目录下核心代码
- 指定特定对象的特定事件
- 线程特定数据
- 服务器安装ESXi系统时卡在loading /lsi_mr3.v00
- IIS支持解析json
- QSC and Master 区间dp
- 《程序员面试笔试宝典》C知识归纳
- Spring通过ApplicationContextAware获得bean的方法、获取数据库连接的方法、获取Appl...
- 指定线程在特定核心
- CoordinatorLayout配合AppBarLayout,Toolbar和TabLayout的使用
- erlang large日志系统代码阅读(一):lager_app
- 火狐HttpTool使用方法post
- HTML5+JS游戏开发模块----canvas图片拖放
- easyUI 设置datagrid的行高 + 文字超宽换行
- 成功的境界
- 深入浅出MFC:Windows程序的生与死
- UVa 11181 Probability|Given