Files
cKit/Foundation/c_HardwareConcurrency.c
T

50 lines
1.7 KiB
C
Raw Normal View History

2026-09-07 19:33:37 +08:00
#include <c_HardwareConcurrency.h>
/* ================================================================================================================== */
/* Cross-Platform OS Handle Interceptions */
#if defined(_WIN32) || defined(_WIN64)
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#elif defined(__linux__) || defined(__ANDROID__) || defined(__hpux) || defined(_AIX)
#include <unistd.h>
#elif defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)
#include <unistd.h>
#include <sys/types.h>
#include <sys/sysctl.h>
#endif
c_size_t c_HardwareConcurrency(void) {
#if defined(_WIN32) || defined(_WIN64)
SYSTEM_INFO sys_info;
GetSystemInfo(&sys_info);
return (c_size_t)sys_info.dwNumberOfProcessors > 0 ? (c_size_t)sys_info.dwNumberOfProcessors : 1;
#elif defined(__linux__) || defined(__ANDROID__) || defined(__hpux) || defined(_AIX)
long cores = sysconf(_SC_NPROCESSORS_ONLN);
return (cores > 0) ? (c_size_t)cores : 1;
#elif defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)
int mib[2];
mib[0] = CTL_HW;
mib[1] = HW_NCPU; /* Fallback baseline key token selector */
#ifdef HW_AVAILCPU
mib[1] = HW_AVAILCPU; /* Preferred choice: online/available logical cores count query */
#endif
int num_cores = 0;
size_t len = sizeof(num_cores);
if (sysctl(mib, 2, &num_cores, &len, NULL, 0) == 0 && num_cores > 0) {
return (c_size_t)num_cores;
}
return 1;
#else
/* Safe fallback anchor primitive for completely unknown or specialized bare-metal setups */
return 1;
#endif
}