This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: implementation of std::thread::hardware_concurrency()


> Er, the macro _GLIBCXX_NPROCS already handles
> the case sysconf(_SC_NPROCESSORS_ONLN).
> It looks like you actually want to remove the macro
> _GLIBCXX_NPROCS completely.

Fixed.

diff --git a/libstdc++-v3/src/thread.cc b/libstdc++-v3/src/thread.cc
index 09e7fc5..6feda4d 100644
--- a/libstdc++-v3/src/thread.cc
+++ b/libstdc++-v3/src/thread.cc
@@ -112,10 +112,20 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   unsigned int
   thread::hardware_concurrency() noexcept
   {
-    int __n = _GLIBCXX_NPROCS;
-    if (__n < 0)
-      __n = 0;
-    return __n;
+    int count = 0;
+#if defined(PTW32_VERSION) || \
+   (defined(__MINGW64_VERSION_MAJOR) && defined(_POSIX_THREADS)) || \
+   defined(__hpux)
+    count = pthread_num_processors_np();
+#elif defined(__APPLE__) || defined(__FreeBSD__)
+    size_t size = sizeof(count);
+    sysctlbyname("hw.ncpu", &count, &size, NULL, 0);
+#elif defined(_GLIBCXX_USE_GET_NPROCS) || \
+   defined(_GLIBCXX_USE_SC_NPROCESSORS_ONLN)
+    count = _GLIBCXX_NPROCS;
+#endif
+    return (count > 0) ? count : 0;
   }

 _GLIBCXX_END_NAMESPACE_VERSION




> Do you have already a Copyright assignment in place?

No. For public domain.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]