सर्वोत्तम अभ्यास चुनाव के लिए नहीं है ... लेकिन आंतरिक रूप से वैसे भी मतदान नहीं हो रहा है जब एक थ्रेड कॉल प्रतीक्षा ()?


13

कहें कि हमारे पास कुछ धागा है जो यह जांचना चाहता है कि दूसरा धागा कब अपना कार्य पूरा कर रहा है। मैंने पढ़ा है कि हमें एक प्रतीक्षा () प्रकार फ़ंक्शन को कॉल करना चाहिए जो इस थ्रेड को तब तक प्रतीक्षा करेगा जब तक कि यह एक अधिसूचना प्राप्त न कर ले कि दूसरा धागा समाप्त हो गया है। और यह अच्छा है क्योंकि इसका मतलब है कि हम महंगे मतदान नहीं कर रहे हैं।

लेकिन वैसे भी निचले स्तर पर आंतरिक रूप से मतदान नहीं हो रहा है? यानी, अगर हम थ्रेड वेट () कर रहे हैं, तो कर्नल किसी भी तरह से यह जांचने के लिए मतदान नहीं कर रहा है कि दूसरा धागा कब खत्म हो जाए ताकि वह पहले थ्रेड को सूचित कर सके?

मुझे लगता है कि मैं यहाँ कुछ याद कर रहा हूँ, क्या कोई मुझे बता सकता है?

जवाबों:


28

ऑपरेटिंग सिस्टम इस तरह के इंटरप्रोसेस संचार के लिए कुछ प्राइमिटिव्स प्रदान करता है जिन्हें मतदान की आवश्यकता नहीं होती है।

यदि प्रक्रिया A म्यूटेक्स M पर प्रतीक्षा कर रही है, तो OS जानता है कि A को चलाया नहीं जा सकता है और इसे कुछ होने की प्रतीक्षा में प्रक्रियाओं की एक बाल्टी में रख देता है। जब M धारण करने वाली प्रक्रिया इसे जारी करती है, तो OS इसकी प्रतीक्षा करने वाली प्रक्रियाओं की सूची को देखता है। सूची पर पहली प्रक्रिया, शायद ए, बेकार बाल्टी से हटा दी जाती है और रन कतार पर डाल दी जाती है । अगली बार A को एक समय टुकड़ा मिलता है, प्रतीक्षा () यह कहा जाता है वापस आ जाएगा और कार्यक्रम जारी है।


तो एक तरह से यह मतदान है लेकिन ओएस स्तर पर है?
tgkprog

7
नहीं @tgkprog, यह मतदान नहीं है, क्योंकि प्रतीक्षा प्रक्रिया ओएस या किसी अन्य प्रक्रिया के म्यूटेक्स को जारी करने तक चलने के लिए निर्धारित नहीं है। एक मतदान प्रक्रिया सीपीयू शेड्यूलिंग में प्रतिस्पर्धा करना जारी रखेगी ताकि यह जांच हो सके कि यह इंतजार करना बंद कर देना चाहिए। इस तरह की एक मतदान प्रक्रिया सीपीयू समय के एक बड़े हिस्से को जला सकती है, जबकि वह इंतजार करती है।
जोश

मेरा मतलब था कि म्यूटेक्स स्थिति को मतदान करने वाली ओएस प्रक्रिया। हालांकि मुझे यकीन है कि इसके अनुकूलित और बेहतर हम कुछ भी कर सकते हैं। शायद अनुसूचक के हिस्से के रूप में चलता है।
tgkprog

4
@tgkprog: OS एक म्यूटेक्स के साथ क्या हो रहा है उस पर थोड़ा सा ध्यान नहीं देता है जब तक कि इसे धारण करने वाली प्रक्रिया इसे जारी या समाप्त नहीं कर देती। या तो उन घटनाओं में से जो भी प्रक्रिया वेटिंग लिस्ट पर पहले है उस OS OS को म्यूटेक्स लॉक का कारण बनेगी और उस प्रक्रिया को रननीय के रूप में चिह्नित करेगी। इसमें कोई मतदान शामिल नहीं है, बस एक घटना के लिए प्रतिक्रिया। सब कुछ कहा joshp संदर्भ द्वारा शामिल है। :-)
ब्लरफ्ल

2
@csss: बहुत सुंदर। प्रक्रियाएँ स्वैच्छिक रूप से समाप्त हो सकती हैं (जैसे, _exit(2)POSIX-y सिस्टम पर कॉल करना) या अनैच्छिक रूप से (उदाहरण के लिए, डिवाइड-बाय-ज़ीरो जैसी त्रुटि एक अवरोध या कुछ और कॉल उत्पन्न करती है kill(2))। या तो मामले में, नियंत्रण को स्पष्ट रूप से ओएस पर वापस सौंप दिया जाता है, जो जानता है कि क्या प्रक्रिया चल रही थी या मारना था। एक प्रक्रिया को समाप्त करने के काम में अपने संसाधनों को मुक्त करना, म्यूटेक्स शामिल हैं। यदि एक म्यूटेक्स को अभी-मृत प्रक्रिया द्वारा आयोजित किया गया था, तो ओएस इसे जारी करेगा। यदि प्रक्रिया म्यूटेक्स की प्रतीक्षा सूची में थी, तो इसे हटा दिया जाएगा।
ब्लरफ्ल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.