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