| /////////////////////////////////////////////////////////////////////////////// |
| // |
| /// \file cpucores.h |
| /// \brief Get the number of online CPU cores |
| // |
| // Author: Lasse Collin |
| // |
| // This file has been put into the public domain. |
| // You can do whatever you want with this file. |
| // |
| /////////////////////////////////////////////////////////////////////////////// |
| |
| #ifndef CPUCORES_H |
| #define CPUCORES_H |
| |
| #if defined(HAVE_CPUCORES_SYSCONF) |
| # include <unistd.h> |
| |
| #elif defined(HAVE_CPUCORES_SYSCTL) |
| # ifdef HAVE_SYS_PARAM_H |
| # include <sys/param.h> |
| # endif |
| # ifdef HAVE_SYS_SYSCTL_H |
| # include <sys/sysctl.h> |
| # endif |
| #endif |
| |
| |
| static inline uint32_t |
| cpucores(void) |
| { |
| uint32_t ret = 0; |
| |
| #if defined(HAVE_CPUCORES_SYSCONF) |
| const long cpus = sysconf(_SC_NPROCESSORS_ONLN); |
| if (cpus > 0) |
| ret = (uint32_t)(cpus); |
| |
| #elif defined(HAVE_CPUCORES_SYSCTL) |
| int name[2] = { CTL_HW, HW_NCPU }; |
| int cpus; |
| size_t cpus_size = sizeof(cpus); |
| if (!sysctl(name, &cpus, &cpus_size, NULL, NULL) |
| && cpus_size == sizeof(cpus) && cpus > 0) |
| ret = (uint32_t)(cpus); |
| #endif |
| |
| return ret; |
| } |
| |
| #endif |