2012-04-30 10 views
7

जैसा कि मैंने शीर्षक में लिखा था, मैं जानना चाहता हूं कि सी ++ स्टैंटर्ड धागे उपयोगकर्ता या कर्नेल स्पेस में प्रबंधित हैं या नहीं।std :: धागे उपयोगकर्ता या कर्नेल स्पेस में प्रबंधित होते हैं?

धन्यवाद।

+1

किस प्लेटफ़ॉर्म पर? जहां तक ​​मानक का संबंध है, दोनों विकल्प समान रूप से मान्य हैं। – Fanael

+2

मानक निर्दिष्ट नहीं करता है, लेकिन जिस डिग्री को कर्नेल धागे पर हावी होने के लिए दिया गया है, मुझे लगता है कि यह अनुमान लगाने में सुरक्षित है कि अधिकांश कार्यान्वयन कर्नेल धागे का उपयोग करने की संभावना है। –

+1

सी ++ में "कर्नेल" जैसी कोई चीज़ नहीं है। आपका प्रश्न सी ++ पर एक भाषा के रूप में लागू नहीं होता है। –

उत्तर

13

जैसा कि लगभग हमेशा होता है, मानक किसी विशेष कार्यान्वयन को अनिवार्य नहीं करता है, केवल यह आवश्यक है कि प्रदर्शित व्यवहार इसके नियमों के अनुरूप हो।

इस प्रकार, विशेष कार्यान्वयन चुनने के लिए स्वतंत्र है; दूसरी ओर, शायद कई कार्यान्वयन boost.thread पर आधारित होंगे (जिस पर std::thread प्रस्ताव आधारित है), इसलिए हम इसे एक विचार के लिए देख सकते हैं।

यह पुस्तकालय Win32 पर POSIX और Windows थ्रेड पर pthreads का उपयोग करता है। Win32 थ्रेड निश्चित रूप से कर्नेल थ्रेड्स हैं, लेकिन अपने स्वयं के पर अभी तक एक और इंटरफ़ेस पर pthreads हैं, जो उपयोगकर्ता स्थान और कर्नेल स्पेस में लागू किए जा सकते हैं (हालांकि लगभग हाल ही में यूनिक्स कर्नेल उन्हें कर्नेल स्पेस में लागू करने के लिए सुविधाएं प्रदान करता है) ।

तो: std::thread कुछ भी हो सकता है, हालांकि, "मुख्यधारा" पीसी ऑपरेटिंग सिस्टम/कार्यान्वयन पर, यह बहुत संभावना है कि आपको कर्नेल थ्रेड मिलेगा। अगर किसी कारण से आपको और जानना है, तो अपने कंपाइलर के दस्तावेज़ों की जांच करें।

+0

आईआईआरसी, डिनक्यूमवेयर का थ्रेड कार्यान्वयन एक क्लीनरूम कार्यान्वयन है, बूस्ट व्युत्पन्न नहीं है, और यह भी कर्नेल थ्रेडिंग का उपयोग करता है। – MSalters

4

इंटरफ़ेस designed around pthreads है, लेकिन यह तय करने के लिए libC++ के कार्यान्वयन पर निर्भर है कि इसका उपयोग कैसे किया जाए।

+0

@ जेरी: संपादित। –

+0

+1 - कम से कम मेरे लिए अधिक सटीक दिखता है। –

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