/* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* gthread.c: MT safety related functions
* Copyright 1998 Sebastian Wilhelmi; University of Karlsruhe
* Owen Taylor
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see .
*/
#include
#ifdef HAVE_UNISTD_H
#include
#endif
#if !defined GLIB_VERSION_2_36
/**
* g_get_num_processors:
*
* Determine the approximate number of threads that the system will
* schedule simultaneously for this process. This is intended to be
* used as a parameter to g_thread_pool_new() for CPU bound tasks and
* similar cases.
*
* Returns: Number of schedulable threads, always greater than 0
*
* Since: 2.36
*/
guint
g_get_num_processors (void)
{
#if defined(HAVE_UNISTD_H) && defined(_SC_NPROCESSORS_ONLN)
{
int count;
count = sysconf (_SC_NPROCESSORS_ONLN);
if (count > 0)
return count;
}
#elif defined HW_NCPU
{
int mib[2], count = 0;
size_t len;
mib[0] = CTL_HW;
mib[1] = HW_NCPU;
len = sizeof(count);
if (sysctl (mib, 2, &count, &len, NULL, 0) == 0 && count > 0)
return count;
}
#endif
return 1; /* Fallback */
}
#endif