Why is there a difference using std::thread::hardware_concurrency() and boost::thread::hardware_concurrency()?

前端 未结 2 1930
孤街浪徒
孤街浪徒 2021-02-12 09:39

The description of the problem itself is pretty simple. I\'m testing the differences of std::thread library in C++11 and boost::thread library.

The output of these:

相关标签:
2条回答
  • 2021-02-12 09:49

    After reviewing /usr/include/c++/4.6.2/thread

    it can be seen that the implementation is actually:

    // Returns a value that hints at the number of hardware thread contexts.
    static unsigned int
    hardware_concurrency()
    { return 0; }
    

    So problem solved. It's just another feature that hasn't been implemented in gcc 4.6.2

    0 讨论(0)
  • 2021-02-12 10:05

    The method employed by your compiler installation of boost is supported for your target, whereas your installation of boost compiler does not support this feature for your target.

    TFM says:

    The number of hardware threads available on the current system (e.g. number of CPUs or cores or hyperthreading units), or 0 if this information is not available.

    EDIT: scratch that, reverse it.

    EDIT2: This feature is present on the trunk, but absent in 4.6.2:

    ~/tmp/gcc-4.6.2/libstdc++-v3/src> wc -l thread.cc
    104 thread.cc
    ~/tmp/gcc-4.6.2/libstdc++-v3/src> grep concurrency thread.cc | wc -l
    0
    ~/tmp/gcc-4.6.2/libstdc++-v3> grep -C 2 VERIFY testsuite/30_threads/thread/members/hardware_concurrency.cc
    
      // Current implementation punts on this.
      VERIFY( std::thread::hardware_concurrency() == 0 );
    
      return 0;
    
    0 讨论(0)
提交回复
热议问题