/* * TODO: * = Extend tcl.m4 with check for 'sysconf()'. * = Find a proper define for BSD and/or OSX. * Or provide our own through tcl.m4/configure. */ int Tcl_GetNumberOfProcessors (int flags) { #ifdef _WIN /* Windows */ SYSTEM_INFO sysinfo; GetSystemInfo( &sysinfo ); return sysinfo.dwNumberOfProcessors; #elif defined (HAVE_SYSCTL) /* OS X (Mach-derived, BSD-derived), FreeBSD, NetBSD, OpenBSD, Linux, etc. */ int numCPU; nt mib[4]; size_t len; /* 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; } return numCPU; #elif defined (HAVE_SYSCONF) /* * Linux, Solaris, AIX. * Note: This is a non-standard extension of the POSIX call. * Because of this the sysctl() is prefered. */ return sysconf( _SC_NPROCESSORS_ONLN ); #elif defined (hpux) return mpctl(MPC_GETNUMSPUS, NULL, NULL); #else /* * General fallback for anything where we have no idea how it * works. */ return 1; #endif } /* * IRIX: numCPU = sysconf( _SC_NPROC_ONLN ); */