POSIX相当于boost :: thread :: hardware_concurrency

时间:2011-09-07 22:03:44

标签: c++ c linux

  

可能重复:
  Programmatically find the number of cores on a machine

什么是POSIX或x86,x86-64特定的系统调用,以确定系统可以在没有超额预订的情况下运行的最大线程数?谢谢。

1 个答案:

答案 0 :(得分:5)

它使用C兼容的结构,那么为什么不使用实际的代码呢? [库/线程/ 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
}
在Windows中

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