Здравствуйте, Socket, Вы писали:
S>Есть ли кроссплатформенный способ получить количество процессоров в системе?
S>Пока обхожусь win32 решением, но программа кросс, и рано или поздно придется этим вопросом задастся
Общего способа для все posix систем я не знаю, имхо его нет
Вот для тех систем, для которых знаю:
AIX,
Solaris:
#include <stdio.h>
#include <unistd.h>
int main(int argc, char * argv[])
{
int ncpus ;
ncpus = sysconf(_SC_NPROCESSORS_ONLN);
printf("cpus: %d\n", ncpus);
return 0 ;
}
BSD (включая
MacOS X)
#include <stdio.h>
#include <unistd.h>
#include <sys/sysctl.h>
int main(int argc, char * argv[])
{
int ncpus ;
size_t len = sizeof(ncpus);
int mib[2];
mib[0] = CTL_HW ;
mib[1] = HW_NCPU ;
if (sysctl(&mib[0], 2, &ncpus, &len, NULL, 0)!=0) {
ncpus=-1 ;
}
printf("cpus: %d\n", ncpus);
return 0 ;
}
Linux
#include <stdio.h>
#include <unistd.h>
int main(void)
{
int ncpus ;
ncpus = sysconf(_SC_NPROCESSORS_CONF);
printf("cpus: %d\n", ncpus);
return 0 ;
}
HPUX
#include <stdio.h>
#include <sys/mpctl.h>
int main(void)
{
int ncpus ;
ncpus = mpctl(MPC_GETNUMSPUS, NULL, NULL);
printf("cpus: %d\n", ncpus);
return 0 ;
}