c++ - 以编程方式查找机器上的内核数

标签 c++ c multithreading multiplatform

有没有办法以独立于平台的方式从 C/C++ 确定一台机器有多少内核?如果不存在这样的东西,如何确定每个平台(Windows/*nix/Mac)?

最佳答案

C++11

#include <thread>

//may return 0 when not able to detect
const auto processor_count = std::thread::hardware_concurrency();

引用:std::thread::hardware_concurrency


在 C++11 之前的 C++ 中,没有可移植的方式。相反,您需要使用以下一种或多种方法(由适当的 #ifdef 行保护):

  • Win32

    SYSTEM_INFO sysinfo;
    GetSystemInfo(&sysinfo);
    int numCPU = sysinfo.dwNumberOfProcessors;
    
  • Linux、Solaris、AIX 和 Mac OS X >=10.4(即 Tiger 及以上版本)

    int numCPU = sysconf(_SC_NPROCESSORS_ONLN);
    
  • FreeBSD、MacOS X、NetBSD、OpenBSD 等

    int mib[4];
    int numCPU;
    std::size_t len = sizeof(numCPU); 
    
    /* set the mib for hw.ncpu */
    mib[0] = CTL_HW;
    mib[1] = HW_AVAILCPU;  // alternatively, try HW_NCPU;
    
    /* get the number of CPUs from the system */
    sysctl(mib, 2, &numCPU, &len, NULL, 0);
    
    if (numCPU < 1) 
    {
        mib[1] = HW_NCPU;
        sysctl(mib, 2, &numCPU, &len, NULL, 0);
        if (numCPU < 1)
            numCPU = 1;
    }
    
  • HPUX

    int numCPU = mpctl(MPC_GETNUMSPUS, NULL, NULL);
    
  • IRIX

    int numCPU = sysconf(_SC_NPROC_ONLN);
    
  • Objective-C(Mac OS X >=10.5 或 iOS)

    NSUInteger a = [[NSProcessInfo processInfo] processorCount];
    NSUInteger b = [[NSProcessInfo processInfo] activeProcessorCount];
    

关于c++ - 以编程方式查找机器上的内核数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/150355/

相关文章:

ios - 在 iOS 上使用单独的线程联网

java - 如何在多线程之间共享一个事务

javascript - 加载在 JSBN 中创建的 RSA 公钥,然后加密一条消息

c++ - 如何在 C++ 中获取 char 的整数值?

c++ - gcc undefined reference 即使 ld 找到库并且它包含所需的函数

c++ - Qt 如何从运行的线程更新主窗口,正确的方法

c++ - Windows 图形用户界面 : Can I access the "modern ui" from C++?

c++ - Arduino 中不需要的符号扩展

c - 检查符号链接(symbolic link)文件中链接大小是否太大的条件如何在这段代码中起作用?

c - Writing a GlusterFS Translator - 关于这个的任何文档?