POSIX equivalent of boost::thread::hardware_concurrency

POSIX equivalent of boost::thread::hardware_concurrency

本文关键字:hardware concurrency thread POSIX of boost equivalent      更新时间:2023-10-16

可能重复:
以程序方式查找机器上的核心数量

什么是特定于POSIX或x86、x86-64的系统调用,以确定系统在没有过度订阅的情况下可以运行的最大线程数?非常感谢。

它使用C兼容的构造,那么为什么不直接使用实际的代码呢?[libs/thread/src/*/thread.cpp]

使用pthread库:

unsigned thread::hardware_concurrency()
{
#if defined(PTW32_VERSION) || defined(__hpux)
    return pthread_num_processors_np();
#elif defined(__APPLE__) || defined(__FreeBSD__)
    int count;
    size_t size=sizeof(count);
    return sysctlbyname("hw.ncpu",&count,&size,NULL,0)?0:count;
#elif defined(BOOST_HAS_UNISTD_H) && defined(_SC_NPROCESSORS_ONLN)
    int const count=sysconf(_SC_NPROCESSORS_ONLN);
    return (count>0)?count:0;
#elif defined(_GNU_SOURCE)
    return get_nprocs();
#else
    return 0;
#endif
}

在窗口中:

unsigned thread::hardware_concurrency()
{
    SYSTEM_INFO info={{0}};
    GetSystemInfo(&info);
    return info.dwNumberOfProcessors;
}