मैं 2 थ्रेड चला रहा हूं (मान लीजिए कि वे इस पल के लिए pthreads हैं)। Thread_1() उपयोगकर्ता द्वारा परिभाषित एपीआई कॉल बनाता है जो आखिरकार कर्नेल में कुछ काम करता है। थ्रेड_2() पूरी तरह से उपयोगकर्ता-स्थान में है।कर्नेल को सिस्टम कॉल के बीच में थ्रेड को पूर्व-खाली किया जा सकता है?
मेरा प्रश्न है: क्या थ्रेड_2() एपीआई कॉल प्रगति पर है, जबकि पूर्व-खाली थ्रेड_1() द्वारा निष्पादित करना प्रारंभ कर सकता है, नियंत्रण कर्नेल के अंदर कहीं है? यदि नहीं, क्यों, और यदि मैं यह परिदृश्य होना चाहता हूं (किसी भी कारण से), मुझे क्या करना है?
असल में यह मानता है कि आपका धागे कर्नेल-प्रबंधित हैं। और कुछ कर्नल भिन्न हो सकते हैं। – Artelius
क्या आप स्पष्टीकरण दे सकते हैं - कर्नेल-प्रबंधित और गैर कर्नेल प्रबंधित के बीच का अंतर? क्या बदलाव मौजूद हैं? – TCSGrad
गैर-कर्नेल-प्रबंधित धागे कर्नेल द्वारा एक प्रक्रिया के रूप में देखा जाता है। आंतरिक रूप से प्रक्रिया (कर्नेल समर्थन के बिना) अपने विभिन्न धागे शेड्यूल करता है। आम तौर पर यदि इनमें से एक थ्रेड ब्लॉक करता है, तो पूरी प्रक्रिया कर्नेल द्वारा अवरुद्ध के रूप में देखी जाती है और इसलिए कोई धागा नहीं चलता है। यदि धागे कर्नेल-प्रबंधित हैं, तो एक थ्रेड ब्लॉक अगर अधिकांश कर्नेल अन्य धागे चलाएंगे। आप एक साधारण परीक्षण चला सकते हैं जहां एक धागा बार-बार एक सिस्कल को कॉल करता है और दूसरी उपज बार-बार होती है। यदि उपज करने वाले धागे को कोई रनटाइम मिलता है तो इसका मतलब है कि सिस्कल एक प्री-उत्सर्जन बिंदु है। – Artelius