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 "future"
|
||||
#include <sys/types.h>
|
||||
#if !_WIN32 && !__sun__
|
||||
#if !_WIN32
|
||||
#if !__sun__ && !__linux__
|
||||
#include <sys/sysctl.h>
|
||||
#endif // _WIN32
|
||||
#else
|
||||
#include <unistd.h>
|
||||
#endif // !__sun__ && !__linux__
|
||||
#endif // !_WIN32
|
||||
|
||||
_LIBCPP_BEGIN_NAMESPACE_STD
|
||||
|
||||
@ -60,6 +64,11 @@ thread::hardware_concurrency() _NOEXCEPT
|
||||
std::size_t s = sizeof(n);
|
||||
sysctl(mib, 2, &n, &s, 0, 0);
|
||||
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)
|
||||
// TODO: grovel through /proc or check cpuid on x86 and similar
|
||||
// instructions on other architectures.
|
||||
|
@ -113,13 +113,6 @@ strings/
|
||||
c.strings/
|
||||
cuchar.pass.cpp: Can't find cuchar header
|
||||
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/
|
||||
memory/
|
||||
unique.ptr/
|
||||
|
Loading…
x
Reference in New Issue
Block a user