सेमाफोर बनाम म्यूटेक्स
सेमाफोर एक डेटा संरचना है जिसका उपयोग यह सुनिश्चित करने के लिए किया जाता है कि समानांतर प्रोग्रामिंग वातावरण में एक ही समय में कई प्रक्रियाएं एक सामान्य संसाधन या एक महत्वपूर्ण खंड तक नहीं पहुंचती हैं। सेमाफोर का उपयोग मृत तालों और दौड़ की स्थिति से बचने के लिए किया जाता है। कई समवर्ती प्रक्रियाओं द्वारा एक ही समय में एक सामान्य संसाधन तक पहुंच से बचने के लिए म्यूटेक्स (म्यूचुअल एक्सक्लूजन ऑब्जेक्ट) का भी उपयोग किया जाता है।
सेमाफोर क्या है?
सेमाफोर एक डेटा संरचना है जिसका उपयोग महत्वपूर्ण वर्गों को पारस्परिक बहिष्करण प्रदान करने के लिए किया जाता है। सेमाफोर मुख्य रूप से प्रतीक्षा (ऐतिहासिक रूप से पी के रूप में जाना जाता है) और सिग्नल (ऐतिहासिक रूप से वी के रूप में जाना जाता है) नामक दो संचालन का समर्थन करते हैं।प्रतीक्षा ऑपरेशन एक प्रक्रिया को तब तक अवरुद्ध करता है जब तक कि सेमाफोर खुला न हो और सिग्नल ऑपरेशन किसी अन्य प्रक्रिया (थ्रेड) को प्रवेश करने की अनुमति देता है। प्रत्येक सेमाफोर प्रतीक्षा प्रक्रियाओं की एक कतार से जुड़ा होता है। जब थ्रेड द्वारा प्रतीक्षा ऑपरेशन को कॉल किया जाता है, यदि सेमाफोर खुला है, तो थ्रेड जारी रह सकता है। यदि थ्रेड द्वारा प्रतीक्षा ऑपरेशन को कॉल करने पर सेमाफोर बंद हो जाता है, तो थ्रेड अवरुद्ध हो जाता है और उसे कतार में प्रतीक्षा करनी पड़ती है। सिग्नल ऑपरेशन एक सेमाफोर खोलता है और यदि कतार में पहले से प्रतीक्षा कर रहा धागा है, तो उस प्रक्रिया को आगे बढ़ने की अनुमति है और यदि कतार में कोई थ्रेड प्रतीक्षा नहीं कर रहा है तो सिग्नल अगले धागे के लिए याद किया जाता है। दो प्रकार के सेमाफोर होते हैं जिन्हें म्यूटेक्स सेमाफोर और काउंटिंग सेमाफोर कहा जाता है। म्यूटेक्स सेमाफोर एक संसाधन तक एकल पहुंच की अनुमति देता है और सेमाफोर की गिनती कई थ्रेड्स को एक संसाधन तक पहुंचने की अनुमति देती है (जिसमें कई इकाइयां उपलब्ध हैं)।
म्यूटेक्स क्या है?
जब एक कंप्यूटर एप्लिकेशन शुरू होता है, तो यह एक म्यूटेक्स बनाएगा और इसे एक संसाधन से जोड़ देगा।जब किसी थ्रेड द्वारा संसाधन का उपयोग किया जाता है, तो यह लॉक हो जाता है और अन्य थ्रेड इसका उपयोग नहीं कर सकते हैं। यदि कोई अन्य थ्रेड उसी संसाधन का उपयोग करना चाहता है, तो उसे एक अनुरोध करना होगा। फिर उस धागे को एक कतार में रखा जाएगा जब तक कि संसाधन के साथ पहला धागा समाप्त नहीं हो जाता। जब संसाधन के साथ पहला धागा समाप्त हो जाता है, तो ताला हटा दिया जाएगा और कतार में प्रतीक्षा कर रहा धागा संसाधन तक पहुंच प्राप्त कर सकता है। यदि कतार में कई थ्रेड प्रतीक्षा कर रहे हैं, तो उन्हें घूर्णन के आधार पर एक्सेस दिया जाता है। व्यावहारिक रूप से, जब म्यूटेक्स कई थ्रेड्स के बीच एक संसाधन तक पहुंच को वैकल्पिक करता है, तो यह दिखाई देगा क्योंकि एक ही समय में कई थ्रेड एक संसाधन का उपभोग कर रहे हैं। लेकिन आंतरिक रूप से केवल एक ही थ्रेड एक निश्चित समय में संसाधन तक पहुँच रहा है।
सेमाफोर और म्यूटेक्स में क्या अंतर है?
यद्यपि, समांतर प्रोग्रामिंग वातावरण में पारस्परिक बहिष्करण प्राप्त करने के लिए सेमाफोर और म्यूटेक्स दोनों वस्तुओं का उपयोग किया जाता है, लेकिन उनमें कुछ अंतर हैं।एक म्यूटेक्स ऑब्जेक्ट केवल एक थ्रेड को संसाधन या एक महत्वपूर्ण खंड का उपभोग करने की अनुमति देता है, जबकि सेमाफोर एक संसाधन तक सीमित संख्या में एक साथ पहुंच की अनुमति देता है (अधिकतम अनुमत संख्या के तहत)। म्यूटेक्स ऑब्जेक्ट्स के साथ, अन्य थ्रेड्स जो संसाधन तक पहुंचना चाहते हैं, उन्हें एक कतार में इंतजार करना पड़ता है, जब तक कि वर्तमान थ्रेड संसाधन का उपयोग करके समाप्त नहीं हो जाता।