Andrew Morrow: The attached patch is an attempt to implement
std:🧵:hardware_concurrency for platforms that don't offer sysctl, but do provide a POSIX sysconf and _SC_NPROCESSORS_ONLN. git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@161190 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
6d39f9f356
commit
403f91ad2c
@ -12,9 +12,13 @@
|
|||||||
#include "vector"
|
#include "vector"
|
||||||
#include "future"
|
#include "future"
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#if !_WIN32 && !__sun__
|
#if !_WIN32
|
||||||
|
#if !__sun__ && !__linux__
|
||||||
#include <sys/sysctl.h>
|
#include <sys/sysctl.h>
|
||||||
#endif // _WIN32
|
#else
|
||||||
|
#include <unistd.h>
|
||||||
|
#endif // !__sun__ && !__linux__
|
||||||
|
#endif // !_WIN32
|
||||||
|
|
||||||
_LIBCPP_BEGIN_NAMESPACE_STD
|
_LIBCPP_BEGIN_NAMESPACE_STD
|
||||||
|
|
||||||
@ -60,6 +64,11 @@ thread::hardware_concurrency() _NOEXCEPT
|
|||||||
std::size_t s = sizeof(n);
|
std::size_t s = sizeof(n);
|
||||||
sysctl(mib, 2, &n, &s, 0, 0);
|
sysctl(mib, 2, &n, &s, 0, 0);
|
||||||
return n;
|
return n;
|
||||||
|
#elif defined(_POSIX_C_SOURCE) && (_POSIX_C_SOURCE >= 200112L) && defined(_SC_NPROCESSORS_ONLN)
|
||||||
|
long result = sysconf(_SC_NPROCESSORS_ONLN);
|
||||||
|
if (result < 0 || result > UINT_MAX)
|
||||||
|
result = 0;
|
||||||
|
return result;
|
||||||
#else // defined(CTL_HW) && defined(HW_NCPU)
|
#else // defined(CTL_HW) && defined(HW_NCPU)
|
||||||
// TODO: grovel through /proc or check cpuid on x86 and similar
|
// TODO: grovel through /proc or check cpuid on x86 and similar
|
||||||
// instructions on other architectures.
|
// instructions on other architectures.
|
||||||
|
@ -113,13 +113,6 @@ strings/
|
|||||||
c.strings/
|
c.strings/
|
||||||
cuchar.pass.cpp: Can't find cuchar header
|
cuchar.pass.cpp: Can't find cuchar header
|
||||||
version_cuchar.pass.cpp: idem.
|
version_cuchar.pass.cpp: idem.
|
||||||
thread/
|
|
||||||
thread.threads/
|
|
||||||
thread.thread.class/
|
|
||||||
thread.thread.static/
|
|
||||||
hardware_concurrency.pass.cpp: Fails due to
|
|
||||||
std::hardware_concurrency unimplemented for non-BSD
|
|
||||||
systems. Patch in progress.
|
|
||||||
utilities/
|
utilities/
|
||||||
memory/
|
memory/
|
||||||
unique.ptr/
|
unique.ptr/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user