c编程技巧——获取可用的处理器(CPU)核数

需求
我们在编程时,尤其是在涉及到系统环境的程序开发中,可能会需要动态的获得当前机器中可用的CPU核数。例如,当我们需要做并行计算时,我们可能会根据CPU核数来决定并行度,因此我们需要在C程序中获得当前机器中可用的CPU核数。

方法
为了跨平台的需要,我们需要同时考虑在不同平台下获取机器处理器核数的方法。在这里我们考虑Linux与Windows两个平台,不同的平台有不同的方法来获取处理器核数。

在Windows平台下,我们可以使用GetSystemInfo( )这个函数来获取当前系统的一些软硬件信息。其中有一项即是当前机器中处理器的核数。通过如下语句即可获得所要的信息:
SYSTEM_INFO info;
GetSystemInfo(&info);
return info.dwNumberOfProcessors;

而在Linux平台下,我们可以使用sysconf( )或者get_nprocs( )来获取处理器核数。下面分别介绍:
sysconf( )有unistd.h提供,要使用该函数需要#include<unistd.h>,其参数可以是_SC_NPROCESSORS_CONF,也可以是_SC_NPROCESSORS_ONLN。sysconf(_SC_NPROCESSORS_CONF)返回系统可以使用的核数,但是其值会包括系统中禁用的核的数目,因此该值并不代表当前系统中可用的核数。而sysconf(_SC_NPROCESSORS_ONLN)的返回值真正的代表了系统当前可用的核数。

GNU C库提供了另外一种获取机器可用核数的方法。函数int
 get_nprocs_conf (void),int get_nprocs (void)在 sys/sysinfo.h中定义,这两个函数可用获取机器的核数。其中get_nprocs_conf (void)的返回值与sysconf(_SC_NPROCESSORS_CONF)类似,并不真正表名当前可用核数;而get_nprocs
 (void)的返回值与sysconf(_SC_NPROCESSORS_ONLN)类似,真正的反映了当前可用核数。

跨平台函数
跨平台的获取系统当前可用核数的函数如下所示:

[cpp]
Int_t get_CPU_core_num( ) 

#if defined(WIN32) 
    SYSTEM_INFO info; 
    GetSystemInfo(&info); 
    return info.dwNumberOfProcessors; 
#elif defined(LINUX) || defined(SOLARIS) || defined(AIX) 
    return get_nprocs();   //GNU fuction 
#else 
#error  不支持的操作系统 
#endif 
}

c编程技巧——获取可用的处理器(CPU)核数相关推荐

  1. 编程linux 获取cpu核数,Linux命令查看以及编程获取CPU核数

    ㈠ 概念 ① 物理CPU 实际Server中插槽上的CPU个数 物理cpu数量,可以数不重复的 physical id 有几个 ② 逻辑CPU Linux用户对 /proc/cpuinfo 这个文件肯 ...

  2. Linux通过编程获取CPU核数

    sysconf( )有unistd.h提供,要使用该函数需要#include<unistd.h>, 其参数可以是 _SC_NPROCESSORS_CONF,也可以是 _SC_NPROCES ...

  3. Matlab编程技巧:通过脚本获取/修改Simulink信号线参数

    上一篇博客<Matlab编程技巧:批量获取/修改Simulink模块参数>中,说明了如果通过matlab脚本批量获取/修改Simulink模块参数.具体方法可以参考https://blog ...

  4. 5 获取当前访问的控制名称_LabVIEW编程技巧:网络通信中如何获取计算机名称、IP地址等信息...

    问题引出 在网络通讯编程中,经常需要获取当前主机的名称.IP地址等信息,在LabVIEW中如何获取这些信息呢? 下面以本机为例进行说明,先看一下本机的信息.在Windows系统中打开控制台程序,输入& ...

  5. 【Java API】Java Runtime.availableProcessors()获取处理器cpu数量

    描述 java.lang.Runtime.availableProcessors() 方法返回到Java虚拟机的可用的处理器数量.此值可能会改变在一个特定的虚拟机调用.应用程序可用处理器的数量是敏感的 ...

  6. 单片机应用编程技巧100问

    单片机应用编程技巧100问 单片机应用编程技巧100问 1.C语言和汇编语言在开发单片机时各有哪些优缺点? 答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言.其主要优点 ...

  7. 单片机应用编程技巧---MCU专家答网友问

    单片机应用编程技巧---MCU专家答网友问 单片机应用编程技巧 Holtek MCU专家--邓宏杰答网友问 (转自电子工程专辑网站) 1.    C语言和汇编语言在开发单片机时各有哪些优缺点? 答:汇 ...

  8. 单片机应用编程技巧问答

    C语言和汇编语言在开发单片机时各有哪些优缺点? 答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言.其主要优点是占用资源少.程序执行效率高.但是不同的CPU,其汇编语言可 ...

  9. VC++ 常用编程技巧总结

    VC++6.0的使用以及编程技巧整理 1.MDI子窗口一启动就最大化      BOOL   CChildFrame::PreCreateWindow(CREATESTRUCT&   cs) ...

  10. 很全的linux网络编程技巧

    注:作者王晓,本人认为总结得很好,故记之,绝无侵权之意. 本文转自:https://www.cnblogs.com/jfyl1573/p/6476607.html 看到好文章想留做自己学习,如有侵权, ...

最新文章

  1. java 上传的图片大小为0_JAVA技术:上传图片的缩放处理
  2. 大家都来说说为什么要学习jQuery Mboile?
  3. ontological 词根词缀_英语中最常见的词缀(一)之 re
  4. python有多少关键字_Python挖词脚本,挖出几十万关键词不是梦带搜索量
  5. my.ini修改后服务无法启动_VisualSVN Server 自助修改密码页面
  6. Oracle相关报错
  7. 知识图谱数据构建的“硬骨头”,阿里工程师如何拿下?
  8. 具有InlfuxDB的Spring Boot和Micrometer第1部分:基础项目
  9. 花了一年时间开发出来的基于DXF文件的加工路径自动生成软件
  10. python解决数据不均衡,上采样方法解决
  11. pythonurllib的使用_python re和urllib的使用问题。
  12. 第六章 线程的基础知识
  13. 数据库系统概论第五版课后习题——第一章 绪论
  14. 数据库逻辑结构设计 → E-R图
  15. 【Matlab】图像裁剪函数imcrop的原点、长度、宽度问题
  16. java中 implement_详解JAVA中implement和extends的区别
  17. 计算机显示c盘的文件被损坏,无法读取,怎么办?,电脑提示损坏文件怎么办
  18. 群晖docker签到京豆_在群晖Docker上的部署qBittorrent
  19. JIRA + FishEye + Crucible + Confluence + PostgreSQL
  20. Fuzzy Clustering详解

热门文章

  1. (转)div+css布局之float与clear的用法
  2. Effective C++ 学习笔记(24)
  3. Security+ 学习笔记25 硬件与数据安全
  4. MPLS连通性测试原理
  5. SQL语句详解(五)——SQL字段修饰符
  6. POJ 2828 Buy Tickets(单点更新) 详细题解和思路
  7. HTML标记语言——文档标记设置
  8. 够快云库轻松解决文件复制速度过慢
  9. 如何学习自然语言处理(转)
  10. 第三天.SQL语言基础