/ / C # में प्रायोरिटी इनहेरिटेंस के साथ एक म्यूटेक्स बनाएं - मल्टीथ्रेडिंग, c # -4.0, mutex

सी # में प्राथमिकता विरासत के साथ एक म्यूटेक्स बनाएं - मल्टीथ्रेडिंग, सी # -4.0, म्यूटेक्स

मेरे पास वस्तुओं की एक स्थिर सूची है। कार्यक्रम के दौरान, कई थ्रेड बनाए जाते हैं। प्रत्येक थ्रेड बनने के तुरंत बाद, यह एक नई ऑब्जेक्ट बनाता है, और इसे स्टैटिक सूची में जोड़ता है। कार्यक्रम में एक और सूत्र है, जो स्थिर सूची से अधिक पुनरावृत्ति करने के लिए जिम्मेदार है।

मान लीजिए कि कम प्राथमिकता "ए" वाला एक धागा हैसूची तक पहुंच, और एक उच्च प्राथमिकता "सी" के साथ एक और धागा भी इसे एक्सेस करने के लिए कहता है, मई (एक दुर्लभ मामले में वास्तव में), मध्यम प्राथमिकता "बी" के साथ वह धागा जो सिस्टम में भी मौजूद है, सीपीयू समय प्राप्त करेगा "ए" का। तो, "C" सामान्य ज्ञान के विपरीत "B" की प्रतीक्षा करेगा।

इस प्राथमिकता उलटा समस्या के साथ शामिल किए बिना मैं सूची को लॉक कैसे प्राप्त कर सकता हूं?

फ़ंक्शन "लॉक ()" मदद कर सकता है?

धन्यवाद!

उत्तर:

जवाब के लिए 2 № 1

यही है, कम से कम, एक लघु अवधि प्राथमिकता उलटा समस्या। जब तक, निश्चित रूप से, कम प्राथमिकता वाला धागा ए बहुत लंबे समय के लिए लॉक रखता है। थ्रेड C "प्रगति कर सकता है क्योंकि यह लॉक पर प्रतीक्षा कर रहा है। जैसा कि हंस पसंत ने अपने जवाब में कहा, थ्रेड शेड्यूलर इस समस्या का पता लगाता है और निचले-प्राथमिकता वाले धागे की प्राथमिकता को बढ़ाता है ताकि यह लॉक को मुक्त कर सके। उसने जो पहला MSDN लिंक पोस्ट किया है, वह उसे अच्छी तरह समझाता है।

यदि आपका कम प्राथमिकता वाला धागा A के लिए लॉक रखता हैएक बहुत लंबे समय (यानी यह "सूची पर जटिल गणना कर रहा है) और वह आपके आवेदन में समस्या पैदा कर रहा है, तो आप निम्न में से एक कर सकते हैं:

  • थ्रेड ए की प्राथमिकता बढ़ाएं
  • थ्रेड है सूची को लॉक करें, एक आइटम प्राप्त करें, सूची को अनलॉक करें, और फिर आइटम को संसाधित करें
  • सूची को लॉक करें, एक कॉपी बनाएं, सूची को अनलॉक करें, और कॉपी को संसाधित करें।
  • ऊपर या संयोजन पर कुछ बदलाव

किसी भी स्थिति में, समस्या ताला नहीं है। समस्या कार्यक्रम को कोडिंग कर रही है ताकि एक उच्च-पुजारी धागे को एक डेटा संरचना पर लंबे समय तक प्रतीक्षा करने के लिए छोड़ दिया जा सके जिसे एक कम प्राथमिकता वाले धागे की अनन्य पहुंच की आवश्यकता होती है।


जवाब के लिए 2 № 2

प्राथमिकता उलटा एक बहुत ही सामान्य समस्या हैएक ऑपरेटिंग सिस्टम जो शेड्यूल करने के लिए अगले थ्रेड को चुनने के लिए थ्रेड प्राथमिकता का उपयोग करता है। विंडोज की तरह। ऑपरेटिंग सिस्टम थ्रेड शेड्यूलर के पास विशिष्ट काउंटरमेशर्स होते हैं, कृत्रिम रूप से थ्रेड प्राथमिकता को उछालते हुए जब यह एक उलटा समस्या का पता लगाता है तो कम-प्राथमिकता वाले थ्रेड को चलाने की अनुमति दी जाती है और लॉक को रिलीज़ करने का अवसर दिया जाता है। MSDN पृष्ठ जो सुविधा का वर्णन करता है यहाँ है। और अधिक जानकारी के साथ पुराने केबी लेख यहाँ है.

मदद मत करो।