implementation of std::thread::hardware_concurrency()
niXman
i.nixman@gmail.com
Tue Nov 1 15:40:00 GMT 2011
With what exactly do you don't accept this patch?
2011/11/1 Jonathan Wakely <jwakely.gcc@gmail.com>:
> On 1 November 2011 11:54, Marc Glisse wrote:
>> On Tue, 1 Nov 2011, niXman wrote:
>>
>>> 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(_SC_NPROCESSORS_ONLN)
>>> + count=sysconf(_SC_NPROCESSORS_ONLN);
>>> +#elif defined(_GLIBCXX_USE_GET_NPROCS)
>>> + count=_GLIBCXX_NPROCS;
>>> +#endif
>>> + return (count>0)?count:0;
>>
>> 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.
>
> Right, I already handled the case of using sysconf. I'm going to veto
> this patch in its current form - please check how it works now before
> changing this code.
>
> _GLIBCXX_NPROCS should be made to call pthread_num_processors_np() for
> mingw or HPUX.
>
More information about the Gcc-patches
mailing list