I'm starting to look into support for multiprocessing (and multi-os- threads). A basic information I need is the number of processors available. This can sometimes be obtained with sysconf, sometimes with sysctl, and perhaps other ways. I have written the test code below to verify which library call is needed. Can people on this list with access to "unusual" operating-systems try it out and report the result (i.e. not Mac OS X, Windows, Linux, and SunOS which I have already checked). You may have to define DONT_HAVE_SYSCTL_H on the command line (this will be taken care of by Gambit's configure script). Marc /* File: "ncpu.c" */ #include <stdio.h> #ifdef _WIN32 #define ___OS_WIN32 #else #define ___OS_POSIX #endif / *----------------------------------------------------------------------- ----*/ #ifdef ___OS_POSIX #include <unistd.h> #ifdef _SC_NPROCESSORS_ONLN #define OP_SC_NPROCESSORS _SC_NPROCESSORS_ONLN #else #ifdef _SC_NPROCESSORS_CONF #define OP_SC_NPROCESSORS _SC_NPROCESSORS_CONF #endif #endif void get_ncpu_with_sysconf () { #ifdef OP_SC_NPROCESSORS int ncpu; if ((ncpu = sysconf (OP_SC_NPROCESSORS)) < 0) perror ("sysconf error"); else printf ("sysconf reported ncpu = %d\n", ncpu); #else printf ("sysconf unusable for getting ncpu\n"); #endif } #ifndef DONT_HAVE_SYSCTL_H #include <sys/types.h> #include <sys/sysctl.h> #ifdef HW_NCPU #define OP_HW_NCPU HW_NCPU #endif void get_ncpu_with_sysctl () { #ifdef OP_HW_NCPU int ncpu; int mib[2]; size_t len; mib[0] = CTL_HW; mib[1] = HW_NCPU; len = sizeof (ncpu); if (sysctl (mib, 2, &ncpu, &len, NULL, 0) < 0) perror ("sysctl error"); else printf ("sysctl reported ncpu = %d\n", ncpu); #else printf ("sysctl unusable for getting ncpu\n"); #endif } #endif #endif / *----------------------------------------------------------------------- ----*/ #ifdef ___OS_WIN32 #include <windows.h> void get_ncpu_with_SysInfo () { int ncpu; SYSTEM_INFO si; GetSystemInfo (&si); ncpu = si.dwNumberOfProcessors; printf ("SysInfo reported ncpu = %d\n", ncpu); } #endif / *----------------------------------------------------------------------- ----*/ int main () { #ifdef ___OS_POSIX get_ncpu_with_sysconf (); #ifndef DONT_HAVE_SYSCTL_H get_ncpu_with_sysctl (); #endif #endif #ifdef ___OS_WIN32 get_ncpu_with_SysInfo (); #endif return 0; } / *----------------------------------------------------------------------- ----*/