म्यूटेक्स बनाम Semaphore – उनके बीच अंतर

म्यूटेक्स और के बीच मुख्य अंतर Semaphore

  • म्यूटेक्स एक लॉकिंग तंत्र है, जबकि Semaphore एक संकेत तंत्र है
  • म्यूटेक्स सिर्फ एक ऑब्जेक्ट है, जबकि Semaphore एक पूर्णांक है
  • म्यूटेक्स का कोई उपप्रकार नहीं होता, जबकि सेमाफोर के दो प्रकार होते हैं: गणना सेमाफोर और बाइनरी सेमाफोर।
  • Semaphore प्रतीक्षा और संकेत संचालन संशोधन का समर्थन करता है, जबकि म्यूटेक्स केवल उस प्रक्रिया द्वारा संशोधित किया जाता है जो संसाधन का अनुरोध या रिलीज कर सकता है।
  • Semaphore दूसरी ओर, म्यूटेक्स ऑपरेशन को लॉक या अनलॉक करने के लिए wait() और signal() का उपयोग किया जाता है।

म्यूटेक्स और के बीच अंतर Semaphore
म्यूटेक्स और के बीच अंतर Semaphore

यहाँ, मैंने म्यूटेक्स और के बीच अंतर का विश्लेषण किया है Semaphore और उनके पक्ष-विपक्ष का व्यापक मूल्यांकन किया जाएगा।

म्यूटेक्स और के बारे में सामान्य तथ्य Semaphore

मेरे अभ्यास से आकर्षित होकर, म्यूटेक्स बनाम के बारे में कुछ सामान्य तथ्य यहां दिए गए हैं Semaphore:

  • केवल एक ही कार्य म्यूटेक्स प्राप्त कर सकता है। इस प्रकार, म्यूटेक्स का स्वामित्व होता है, और केवल स्वामी ही इसे रिलीज़ कर सकता है।
  • म्यूटेक्स और सेमाफोर के उपयोग के कारण अलग-अलग हैं, संभवतः उनके कार्यान्वयन में समानता के कारण, म्यूटेक्स को बाइनरी सेमाफोर कहा जाता है।
  • एक बहुत प्रसिद्ध गलत धारणा यह है कि म्यूटेक्स और Semaphoreदोनों लगभग एक जैसे हैं, अंतर केवल इतना है कि म्यूटेक्स 1 तक गिनने में सक्षम है, जबकि Semaphore0 से N तक गिनने में सक्षम है।
  • बाइनरी सेमाफोर और म्यूटेक्स के बीच हमेशा अनिश्चितता बनी रहती है। आपने सुना होगा कि म्यूटेक्स एक बाइनरी सेमाफोर है, जो सही नहीं है।

क्या है एक Semaphore?

एक सेमाफोर यह बस एक चर है जो गैर-नकारात्मक है और थ्रेड्स के बीच साझा किया जाता है। सेमाफोर एक सिग्नलिंग तंत्र है, और एक थ्रेड जो सेमाफोर पर प्रतीक्षा कर रहा है उसे दूसरे थ्रेड द्वारा संकेत दिया जा सकता है। यह दो परमाणु संचालन का उपयोग करता है, 1) प्रतीक्षा और 2) सिग्नल फॉर द सेमाफोर प्रक्रिया तुल्यकालन.

A सिकंदरा संसाधन तक पहुंच की अनुमति देता है या नहीं देता है, जो इस बात पर निर्भर करता है कि इसे कैसे सेट किया गया है।

का उपयोग Semaphore

एकल बफर के मामले में, हम 4 KB बफर को चार 1 KB बफरों में विभाजित कर सकते हैं। Semaphore इन चार बफ़र्स के साथ संबद्ध किया जा सकता है। यह उपयोगकर्ताओं और उत्पादकों को एक ही समय में अलग-अलग बफ़र्स पर काम करने की अनुमति देता है।

के फायदे Semaphore

मेरे अभ्यास में, सेमाफोर के उपयोग के मुख्य सकारात्मक पहलू इस प्रकार हैं:

  • यह एक से अधिक थ्रेड को महत्वपूर्ण अनुभाग तक पहुंचने की अनुमति देता है
  • Semaphoreये मशीन-स्वतंत्र हैं।
  • Semaphoreइन्हें माइक्रोकर्नेल के मशीन-स्वतंत्र कोड में क्रियान्वित किया जाता है।
  • वे एकाधिक प्रक्रियाओं को महत्वपूर्ण खंड में प्रवेश करने की अनुमति नहीं देते हैं।
  • चूंकि सेमाफोर में प्रतीक्षा समय बहुत व्यस्त रहता है, इसलिए प्रक्रिया समय और संसाधनों की कभी भी बर्बादी नहीं होती।
  • वे मशीन-स्वतंत्र हैं, जिन्हें माइक्रोकर्नेल के मशीन-स्वतंत्र कोड में चलाया जाना चाहिए।
  • वे संसाधनों के लचीले प्रबंधन की अनुमति देते हैं।

का नुकसान Semaphores

यहां सेमाफोर की कुछ कमियां बताई गई हैं जिनका मैंने सामना किया है।

  • सेमाफोर की सबसे बड़ी सीमाओं में से एक है प्राथमिकता व्युत्क्रमण।
  • ऑपरेटिंग सिस्टम को wait और signal semaphore के सभी कॉल्स पर नज़र रखनी होती है।
  • इनका प्रयोग कभी भी जबरन नहीं किया जाता, बल्कि यह केवल परंपरा के अनुसार ही होता है।
  • सेमाफोर में गतिरोध से बचने के लिए, प्रतीक्षा और Signal कार्यों को सही क्रम में निष्पादित करने की आवश्यकता है।
  • Semaphore प्रोग्रामिंग एक जटिल विधि है, इसलिए पारस्परिक अपवर्जन प्राप्त न होने की संभावना रहती है।
  • यह बड़े पैमाने पर उपयोग के लिए भी व्यावहारिक विधि नहीं है क्योंकि इसके उपयोग से मॉड्यूलरिटी की हानि होती है।
  • Semaphore प्रोग्रामर त्रुटि की संभावना अधिक होती है।
  • इसका कारण हो सकता है गतिरोध या प्रोग्रामर की त्रुटि के कारण पारस्परिक बहिष्कार का उल्लंघन।

म्यूटेक्स क्या है?

म्यूटेक्स का पूरा नाम म्यूचुअल एक्सक्लूजन ऑब्जेक्ट है। यह एक विशेष प्रकार का बाइनरी सेमाफोर है जिसका उपयोग साझा संसाधन तक पहुँच को नियंत्रित करने के लिए किया जाता है। इसमें विस्तारित प्राथमिकता व्युत्क्रम समस्याओं से बचने के लिए प्राथमिकता विरासत तंत्र शामिल है। यह वर्तमान उच्च प्राथमिकता वाले कार्यों को यथासंभव कम समय के लिए अवरुद्ध अवस्था में रखने की अनुमति देता है। हालाँकि, प्राथमिकता विरासत प्राथमिकता-व्युत्क्रम को ठीक नहीं करती है बल्कि केवल इसके प्रभाव को कम करती है।

म्यूटेक्स का उपयोग

म्यूटेक्स पारस्परिक बहिष्कार प्रदान करता है, जो निर्माता या उपभोक्ता दोनों में से कोई भी हो सकता है, जिसके पास कुंजी (म्यूटेक्स) हो सकती है और वह अपना काम जारी रख सकता है। जब तक निर्माता बफर भरता है, तब तक उपयोगकर्ता को प्रतीक्षा करनी पड़ती है, और इसके विपरीत। म्यूटेक्स लॉक में, हर समय, केवल एक ही थ्रेड पूरे बफर के साथ काम कर सकता है।

म्यूटेक्स के लाभ

मैंने जो देखा है उसके अनुसार म्यूटेक्स के मुख्य लाभ ये हैं:

  • म्यूटेक्स, इसके महत्वपूर्ण भाग में प्रवेश करने से पहले प्राप्त किए गए सरल लॉक होते हैं तथा फिर उसे छोड़ दिए जाते हैं।
  • चूंकि किसी भी समय केवल एक थ्रेड ही अपने महत्वपूर्ण भाग में होता है, इसलिए कोई रेस स्थितियां नहीं होती हैं, तथा डेटा हमेशा सुसंगत रहता है।

म्यूटेक्स के नुकसान

अपने अभ्यास में, मैंने म्यूटेक्स के कई नुकसानों की पहचान की है।

  • यदि कोई थ्रेड लॉक प्राप्त कर लेता है और सो जाता है या उसे रोक दिया जाता है, तो दूसरा थ्रेड आगे नहीं बढ़ सकता। इससे भुखमरी की स्थिति पैदा हो सकती है।
  • इसे जिस संदर्भ से प्राप्त किया गया है, उससे भिन्न संदर्भ से इसे लॉक या अनलॉक नहीं किया जा सकता।
  • एक समय में केवल एक थ्रेड को महत्वपूर्ण अनुभाग में अनुमति दी जानी चाहिए।
  • सामान्य कार्यान्वयन से व्यस्त प्रतीक्षा स्थिति उत्पन्न हो सकती है, जिससे CPU समय बर्बाद होता है।

के बीच अंतर Semaphore और म्यूटेक्स

उनके साथ काम करते हुए मैंने जो सीखा है, उसके आधार पर, म्यूटेक्स और Semaphores भिन्न हैं:

Semaphore बनाम म्यूटेक्स
Semaphore बनाम म्यूटेक्स
पैरामीटर्स Semaphore म्युटेक्स
तंत्र यह एक प्रकार का संकेत तंत्र है। यह एक लॉकिंग तंत्र है।
डाटा प्रकार Semaphore एक पूर्णांक चर है. म्यूटेक्स केवल एक ऑब्जेक्ट है।
परिवर्तन प्रतीक्षा और संकेत प्रचालन सेमाफोर को संशोधित कर सकते हैं। इसे केवल उस प्रक्रिया द्वारा संशोधित किया जाता है जो संसाधन का अनुरोध या रिलीज कर सकती है।
संसाधन प्रबंधन यदि कोई संसाधन खाली नहीं है, तो प्रक्रिया को एक संसाधन की आवश्यकता होती है जो प्रतीक्षा ऑपरेशन को निष्पादित करे। इसे तब तक प्रतीक्षा करनी चाहिए जब तक कि सेमाफोर की गिनती 0 से अधिक न हो जाए। यदि यह लॉक है, तो प्रक्रिया को प्रतीक्षा करनी होगी। प्रक्रिया को कतार में रखा जाना चाहिए। इसे केवल तभी एक्सेस किया जाना चाहिए जब म्यूटेक्स अनलॉक हो।
धागा आपके पास एकाधिक प्रोग्राम थ्रेड हो सकते हैं. आप म्यूटेक्स में एकाधिक प्रोग्राम थ्रेड रख सकते हैं, लेकिन एक साथ नहीं।
स्वामित्व संसाधन को जारी करने या प्राप्त करने वाली किसी भी प्रक्रिया द्वारा मूल्य को बदला जा सकता है। ऑब्जेक्ट लॉक केवल उस प्रक्रिया द्वारा जारी किया जाता है, जिसने उस पर लॉक प्राप्त किया है।
प्रकार के प्रकार Semaphore गिनती सेमाफोर और बाइनरी सेमाफोर हैं। म्यूटेक्स का कोई उपप्रकार नहीं है।
Operaउत्पादन Semaphore मूल्य को wait() और signal() ऑपरेशन का उपयोग करके संशोधित किया जाता है। म्यूटेक्स ऑब्जेक्ट लॉक या अनलॉक है.
संसाधन अधिभोग यदि सभी संसाधनों का उपयोग किया जा रहा है और संसाधन के लिए अनुरोध करने वाली प्रक्रिया प्रतीक्षा () ऑपरेशन करती है और तब तक खुद को अवरुद्ध करती है जब तक कि सेमाफोर गिनती > 1 नहीं हो जाती, तो इसे व्यस्त माना जाता है। यदि ऑब्जेक्ट पहले से ही लॉक है, तो संसाधनों का अनुरोध करने वाली प्रक्रिया प्रतीक्षा करती है और लॉक जारी होने से पहले सिस्टम द्वारा उसे कतारबद्ध कर दिया जाता है।

निष्कर्ष

मेरे अनुभव में, म्यूटेक्स और सेमाफोर के बीच चयन करने की कुंजी उनकी परिचालन बारीकियों को पहचानना है। Semaphoreम्यूटेक्स जटिल सिंक्रोनाइजेशन के लिए आदर्श होते हैं, जबकि म्यूटेक्स सीधे पारस्परिक बहिष्करण के लिए उपयुक्त होते हैं, जो सरल संदर्भों में संसाधन सुरक्षा सुनिश्चित करते हैं।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: