2011-12-16 14 views
22

समस्या का विवरण स्वयं ही सरल है। मैं सी ++ 11 में std :: थ्रेड लाइब्रेरी के अंतर और बूस्ट :: थ्रेड लाइब्रेरी का परीक्षण कर रहा हूं।std :: thread :: hardware_concurrency() और boost :: thread :: hardware_concurrency() का उपयोग करके कोई अंतर क्यों है?

इनमें से उत्पादन:

0 
4 

कि क्यों है:

#include <iostream> 
#include <thread> 
#include <boost/thread.hpp> 

int main() { 
    std::cout << std::thread::hardware_concurrency() << std::endl; 
    std::cout << boost::thread::hardware_concurrency() << std::endl; 
    return 0; 
} 

मुझे अलग परिणाम देता है?

पीएस: जीसीसी पैकेज का संस्करण 4.6.2-1.fc16 (x86_64) है। मैं

g++ test.cc -Wall -std=c++0x -lboost_thread-mt -lpthread 

उत्तर

19

/usr/include/c++/4.6.2/thread की समीक्षा

यह है कि देखा जा सकता है के बाद कार्यान्वयन वास्तव में है:

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

तो समस्या हल हो गई। यह एक और विशेषता है जिसे जीसीसी 4.6.2

6

विधि अपने संकलक बढ़ावा की स्थापना के द्वारा नियोजित अपने लक्ष्य के लिए समर्थित है का उपयोग कर रहा है, जबकि बढ़ावा संकलक के अपने स्थापना अपने लक्ष्य के लिए इस सुविधा का समर्थन नहीं करता है।

TFM का कहना है:

हार्डवेयर धागे की संख्या मौजूदा प्रणाली (जैसे सीपीयू या कोर या हाइपरथ्रेडिंग इकाइयों की संख्या), या 0 पर उपलब्ध है, तो इस जानकारी उपलब्ध नहीं है।

संपादित करें: स्क्रैच करें, इसे उलट दें।

EDIT2: यह सुविधा 4.6.2 में the trunk पर मौजूद है, लेकिन अनुपस्थित है:

~/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

पर लागू नहीं किया गया है लेकिन वास्तव में बढ़ावा देता है :: धागा सही जानकारी 4 प्रदर्शित कर सकता है, जबकि सी ++ 11 मुझे 0 देता है ... – derekhh

+0

@ डेरेख: इसकी बहुत संभावना है आपका सी ++ 11 कार्यान्वयन सिर्फ एक कंकाल है और वास्तव में – Dani

+0

@Dani नहीं काम करता है: मैं g ++ 4.6.2 का उपयोग कर रहा हूं ... – derekhh

संबंधित मुद्दे