2015-09-12 3 views
5

यदि आप हालत चर (सीवी) के उपयोग का वर्णन करने वाले दस्तावेज को देखते हैं, तो आप देखेंगे उदा। PThreads और C++ में आपको इस सीवी पर सूचित करने के लिए एक सीवी के म्यूटेक्स को पकड़ने की आवश्यकता नहीं है। जबकि उदा। जावा और पायथन में, आपको एक ही चीज़ करने के लिए म्यूटेक्स को लॉक करना होगा।सी/सी ++ और अन्य भाषाओं में कंडीशन वैरिएबल उपयोग पैटर्न

क्या कुछ गहरा कारण है कि इस तरह से चीजों को लागू किया गया है (मैं बाद के मामले के बारे में हूं), यह देखते हुए कि जावा जैसी भाषा का कार्यान्वयन अंततः कुछ देशी थ्रेडिंग टूल का उपयोग करता है?

+0

शायद यह केवल pthreads के शीर्ष पर लागू नहीं किया गया है .. लेकिन यह सिर्फ एक धारणा है। मुझे लगता है कि यह प्रश्न http://cs.stackexchange.com/ पर बेहतर हो सकता है (या यहां तक ​​कि * किसी * *) ... –

+0

स्पष्ट रूप से जेवीएम इसे इस तरह कार्यान्वित कर सकता है, लेकिन यह एक सामान्य गलती है जिसे मैंने देखा है बहुत से लोग बहुत कम लागत पर सी ++ में बहुत कम संभावना रखते हैं (आपको थोड़ी देर तक लॉक रखना होगा, लेकिन यह है) – Voo

+0

@Voo गलती यह है कि डेटा को संशोधित करते समय म्यूटेक्स नहीं होता है, इस स्थिति पर निर्भर करता है? – vehsakul

उत्तर

0

जावा notify और notifyAll बुनियादी सिंक्रनाइज़ेशन टूल दोनों को कॉल करने से पहले ऑब्जेक्ट पर सिंक्रनाइज़ करने की आवश्यकता होती है। यह एक साधारण सुरक्षा बिंदु के लिए है क्योंकि यह आपको wait आईएनजी से पहले सिंक्रनाइज़ करने की भी आवश्यकता है।

उदाहरण के लिए यदि आपके पास दो धागे हैं। एक धागा एक बफर से डेटा पढ़ता है और एक थ्रेड डेटा को बफर में लिखता है।

रीडिंग डेटा थ्रेड को तब तक प्रतीक्षा करने की आवश्यकता है जब तक कि लेखन डेटा थ्रेड ने डेटा के ब्लॉक को बफर में लिखना समाप्त नहीं किया हो और फिर यह ब्लॉक को पढ़ सके।

  • पढ़ने धागा wait() कॉल करता है और धागा कतार इंतजार कर में जोड़ा जाता है: जहां wait(), notify(), और notifyAll() तरीकों तुल्यकालन बिना कहा जा सकता है

    हैं तो आप एक रेस स्थिति प्राप्त कर सकते हैं।

  • उसी समय, लेखन थ्रेड ने notify() को संकेत दिया है कि यह डेटा जोड़ता है।

  • रीडिंग थ्रेड परिवर्तन को याद करता है और notify()wait() से पहले संसाधित होने के बाद हमेशा के लिए इंतजार कर रहा था।

wait और notify मजबूर कर एक तुल्यकालन ब्लॉक इस दौड़ हालत निकाल दिया जाता है के भीतर होने की हैं।

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