-std=c++11
निर्दिष्ट करते समय एक प्रोग्राम को संकलित करते समय सीधे या अप्रत्यक्ष रूप से std::thread
का उपयोग -pthread
का संकेत नहीं देता है? यह अजीब लगता है कि हुड के नीचे pthreads का उपयोग कर std::thread
के कार्यान्वयन विस्तार प्रोग्रामर के संपर्क में है; यदि उपयोगकर्ता को पॉज़िक्स-संगत थ्रेडिंग लाइब्रेरीज़ का विकल्प देने का मामला है, तो क्यों न केवल pthreads के लिए डिफ़ॉल्ट है और कुछ --threading-model=<your_favorite_posix_threads_library>
तर्क को ओवरराइड करने के लिए तर्क है?जीसीसी और क्लैंग में std :: धागे के उपयोग के लिए आवश्यक क्यों है?
उत्तर
-pthread
विकल्प std::thread
का उपयोग करने के लिए सार्वभौमिक रूप से आवश्यक नहीं है - यह आपके द्वारा निर्मित किए जा रहे प्लेटफ़ॉर्म के कार्यान्वयन क्विर्क है।
संकलन:
#include <thread>
#include <iostream>
int main()
{
std::thread t{[]()
{
std::cout << "Hello World\n";
}};
t.join();
return 0;
}
clang -std=c++11 ThreadTest.cpp -lc++
MacOSX पर साथ, बनाता है और रन, और अगर हम ऐसा करते हैं:
otool -L a.out
a.out:
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.1.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1225.0.0)
हम देख सकते हैं कि हम से जोड़ने के लिए की जरूरत गया है यह काम करने के लिए कुछ भी अतिरिक्त नहीं है - न ही यह दृश्यों के पीछे हुआ है। ऐसा लगता है कि यह एक मंच कार्यान्वयन विस्तार है कि pthreads एक अलग पुस्तकालय है।
पर्थ्रेड इंटरफ़ेस के साथ थ्रेडिंग लाइब्रेरीज़ की पसंद होने के बाद * एनआईक्स सिस्टम पर विरासत सामान है, जिनमें से कई थ्रेड समर्थन के बिना शुरू हो गए हैं, फिर पूर्ण कर्नेल समर्थन होने से पहले उपयोगकर्ता-स्पेस थ्रेड के चरण से गुजर चुके हैं। मुझे लगता है कि यह अभी भी वहां है क्योंकि कोई भी तोड़ने में बदलाव करना पसंद नहीं करता है।
"मुझे लगता है कि यह अभी भी वहां है क्योंकि कोई भी ब्रेकिंग बदलाव नहीं करना पसंद करता है" लेकिन चूंकि आपको किसी भी तरह से std :: thread का उपयोग करने के लिए कोड बदलना है, इसलिए मुझे यह नहीं दिख रहा है कि अगर कोई और निर्दिष्ट नहीं है तो lpthread को मानने के लिए इसे कैसे परिभाषित किया जाए कुछ तोड़ देगा? – Voo
जिस बदलाव का मैं जिक्र कर रहा था वह किसी भी प्रोग्राम में libpthread को शामिल करने की आवश्यकता थी जो कुछ प्लेटफॉर्म पर थ्रेडिंग का उपयोग करता है। सी ++ 11 अनुपालन उपकरण और पुस्तकालय सी ++ 03 कोड-बेस के लिए काफी हद तक पिछड़े हैं। एक को वास्तव में आश्चर्य करना होगा कि क्यों एक अलग पुस्तकालय में pthreads अभी भी फैल गया है। – marko
वैसे यह दिलचस्प है। जिज्ञासा से, यदि आप क्लैंग के साथ निर्माण करते हैं तो ओएसएक्स पर सी ++ लाइब्रेरी का उपयोग किया जाता है लेकिन '-lC++' निर्दिष्ट नहीं करते हैं? – JAB
- 1. क्लैंग और जीसीसी
- 2. कॉन्स ऑटो std :: क्लैंग और जीसीसी
- 3. सी ++ 11 धागे क्लैंग
- 4. std :: quick_exit और std :: abort के बीच क्या अंतर है और std :: quick_exit क्यों आवश्यक था?
- 5. क्लैंग और जीसीसी
- 6. जीसीसी और std = c99
- 7. वही FLT_EVAL_METHOD, जीसीसी/क्लैंग
- 8. std :: rbegin और std :: जीसीसी 4.9 में रेंग फ़ंक्शन और क्लैंग 3.5
- 9. सी ++ में ओवरलोडेड लैम्ब्डा और क्लैंग और जीसीसी
- 10. क्लैंग और जीसीसी रूपांतरण ऑपरेटर
- 11. std :: क्लैंग
- 12. जीसीसी के शीर्षकों के लिए क्लैंग खोज कैसे करें?
- 13. "-std = C++ 0x" क्यों है g ++ 4.6.2 के लिए अभी भी आवश्यक है?
- 14. क्लैंग जीसीसी पुस्तकालयों का उपयोग करने लगता है
- 15. जीसीसी बनाम क्लैंग: प्रतीक
- 16. जीसीसी में बग, या क्लैंग/एमएसवीएस
- 17. std :: async (std :: launch :: async) बनाम जीसीसी का व्यवहार बनाम क्लैंग का व्यवहार
- 18. क्यों क्लैंग एक जीसीसी स्थापना का चयन करता है?
- 19. क्या एलवीएम-जीसीसी और क्लैंग बाइनरी जीसीसी के साथ संगत है? - विंडोज
- 20. क्लैंग संकलन काम करता है जबकि जीसीसी हीरा विरासत के लिए नहीं है
- 21. ऑपरेटर कास्ट, जीसीसी और क्लैंग: कौन सा कंपाइलर सही है?
- 22. टेम्पलेट पैरामीटर के रूप में वैराडिक टेम्पलेट: कटौती जीसीसी के साथ काम करता है लेकिन क्लैंग
- 23. क्या std :: make_shared मूल्य प्रारंभिकरण (जीसीसी और क्लैंग असहमत) करता है?
- 24. std :: नेमस्पेस क्वालीफायर के बिना सुलभ क्यों होता है?
- 25. जीसीसी std :: थ्रेड नेमस्पेस std
- 26. क्लैंग चेतावनी क्यों देता है: '' && 'के भीतर' || ''?
- 27. क्लैंग के साथ -जीपी के लिए वैकल्पिक?
- 28. सी ++ की "इनलाइन" - जीसीसी और क्लैंग/एलएलवीएम के लिए यह कितना मजबूत संकेत है?
- 29. जीसीसी और क्लैंग सीवीटीएस 2 एसडी [मेमोरी] का उपयोग क्यों नहीं करते?
- 30. क्लैंग के लिए लिंकर?
यदि आप "जी + सी ++ -pthread -std = C++ 11'" के रूप में "जीसीसी के लिए जीसीसी" के बारे में सोचते हैं तो यह आपकी मदद करेगा और परिभाषा में शब्दावली के बारे में चिंता न करें? –
@KerrekSB यह सीएमकेक्यूसीओएफ_एफएलजीएस (माइक्रोसॉफ्ट का कंपाइलर अज्ञात झंडे के बारे में शिकायत करता है लेकिन उन्हें अनदेखा करता है) या प्लेटफ़ॉर्म/'find_library' सशर्तों को रखने के लिए सीएमके का उपयोग करते समय वास्तव में क्रॉस-प्लेटफ़ॉर्म होने का प्रयास करते समय दर्द होता है, खासकर यदि अंततः व्यवहार _does_ अंत में बदल रहा है। मुझे मिली एक मेलिंग सूची 'find_package (थ्रेड)' का उपयोग करके सुझाई गई, लेकिन यह जीसीसी या क्लैंग के साथ काम नहीं कर रहा है। मैं एक समाधान की तलाश नहीं कर रहा हूं क्योंकि मुझे पहले से ही पता है कि क्या करना है, मैं सिर्फ यह पता लगाने की कोशिश कर रहा हूं कि वे इस तरह से क्यों व्यवहार करते हैं। क्या यह सिर्फ पीछे की तरफ है? – JAB
मुझे नहीं लगता कि एक कारण है। किसी ने व्यवहार को बदलने के लिए बहुत अधिक परवाह नहीं की, जिसे प्री-सी ++ 11 कंपाइलर से विरासत में मिला था। – SergeyA