सेमाफोर बनाम मॉनिटर्स - क्या अंतर है?


233

एक मॉनिटर और एक सेमाफोर के बीच प्रमुख अंतर क्या हैं ?


8
आप बाइनरी सेमाफोर के रूप में मॉनिटर के बारे में सोच सकते हैं।
मैक्सिम इगोरुस्किन


1
कृपया इस albahari.com/threading/part2.aspx पर जाएं । मैंने इस लेख को पढ़ा, सबसे अच्छा जो मैंने कभी थ्रेडिंग पर पढ़ा
शांतनु गुप्ता ने

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

1
सेमाफोर और मॉनिटर बहुत अंतर हैं, फिर भी शक्ति के बराबर, इस अर्थ में कि आप एक से दूसरे को लागू कर सकते हैं। आप होरे के मूल पेपर को पढ़ सकते हैं जो यहां
थान डीके

जवाबों:


529

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

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

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

एक मॉनिटर एक सार्वजनिक शौचालय की तरह है। एक समय में केवल एक ही व्यक्ति प्रवेश कर सकता है। वे किसी और को आने से रोकने के लिए, अपना सामान करने के लिए दरवाजे को बंद कर देते हैं, और जब वे जाते हैं तब इसे अनलॉक करते हैं।

एक सेमीफोर बाइक किराए की जगह की तरह है। उनके पास निश्चित संख्या में बाइक हैं। यदि आप बाइक चलाने की कोशिश करते हैं और उनके पास एक मुफ्त है तो आप इसे ले सकते हैं, अन्यथा आपको इंतजार करना होगा। जब कोई अपनी बाइक वापस करता है तो कोई और ले सकता है। अगर आपके पास एक बाइक है तो आप इसे किसी और को वापस करने के लिए दे सकते हैं --- बाइक किराए पर लेने वाले को इसकी परवाह नहीं है कि वह किसे लौटाता है, जब तक कि उन्हें अपनी बाइक वापस नहीं मिल जाती।


162
सार्वजनिक बाथरूम और बाइक किराए पर लेने की जगह के साथ +1 महान सादृश्य। मैं अब दोनों के बीच के अंतर को कभी नहीं भूलूंगा।
द्रुपद पांचाल

4
आपका उत्तर स्टैकओवरफ्लो को विरोधाभासी लगता है ।.com // 7336799/ 632951 .. तो कौन सही है?
पचेरियर

6
@ स्पेसर: मैं हूं :-) केवल विरोधाभास उच्च-स्तरीय / निम्न-स्तरीय चीज है। आप सेमाफोर से एक मॉनिटर का निर्माण कर सकते हैं , यह सिर्फ बहुत सुव्यवस्थित नहीं है, ठीक है क्योंकि एक मॉनिटर एक अर्ध-स्तरीय संरचना है जो अर्ध-विराम से अधिक है। एक सेमाफोर प्रतीक्षा के साथ एक काउंटर है। मेरा सुझाव है कि "द लिटिल बुक ऑफ सेमाफोरेस
एंथनी विलियम्स

3
@AnthonyWilliams: मुझे शायद इस धारणा पर संदेह है कि आप केवल सेमाफोर से मॉनिटर बना सकते हैं। दूसरा रास्ता भी संभव है और इस वजह से हम यह नहीं कह सकते हैं कि मॉनिटर सेमीफोर से उच्च स्तर की इकाई है।
कविश द्विवेदी

5
हां, आप एक मॉनिटर से एक सेमाफोर का निर्माण कर सकते हैं। आप हमेशा उच्च स्तर के लोगों से निम्न स्तर की वस्तुओं का निर्माण कर सकते हैं। उच्च / निम्न स्तर की सामग्री क्षमताओं और संचालन के दायरे के बारे में है, न कि जिसके बारे में दूसरे को बनाने के लिए इस्तेमाल किया जा सकता है।
एंथनी विलियम्स

11

निम्नलिखित विवरण वास्तव में बताते हैं कि कैसे प्रतीक्षा () और संकेत () मॉनिटर के पी और वी से अलग हैं।

प्रतीक्षा () और संकेत () एक में हालत चर पर कार्रवाई की निगरानी के लिए समान हैं पी और वी गिनती पर कार्रवाई संकेतबाहु

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

लिंक: यहाँ आगे पढ़ने के लिए। आशा करता हूँ की ये काम करेगा।


6

एक पंक्ति उत्तर:

मॉनीटर: एक समय में केवल एक थ्रेड को नियंत्रित करता है जो मॉनीटर में निष्पादित हो सकता है। (एकल धागा निष्पादित करने के लिए ताला प्राप्त करने की आवश्यकता)

सेमाफोर: एक ताला जो एक साझा संसाधन की रक्षा करता है। (संसाधन का उपयोग करने के लिए ताला प्राप्त करने की आवश्यकता)


5

सेमफोर एक साझा ऑब्जेक्ट तक पहुंचने के लिए कई थ्रेड्स (एक सेट संख्या तक) की अनुमति देता है। किसी साझा किए गए ऑब्जेक्ट पर पारस्परिक रूप से अनन्य पहुंच की अनुमति देता है।

मॉनिटर

सिकंदरा


10
लेकिन, फिर एक मॉनिटर कैसे एक MutEx से अलग होगा? एक पारस्परिक बहिष्कार ताला एक ही अर्धकुंभ के रूप में सटीक काम करता है, लेकिन केवल एक धागे को एक समय में महत्वपूर्ण क्षेत्र तक पहुंचने की अनुमति देता है।
user919860

2
हाँ एक mnitor और एक म्यूटेक्स के बीच अंतर क्या है?
पचेरियर

2
वर्थ नोटिंग कि सेमाफोरस किसी साझा वस्तु तक पहुंच को नियंत्रित नहीं करता है, बल्कि एक साझा संसाधन (जिसमें कई ऑब्जेक्ट होंगे)।
xbonez

@xbonez: यदि हम देखें java.util.ArrayList: क्या यह एक वस्तु या कई वस्तुओं का कंटेनर है? खैर, यह दोनों एक ही समय में है। तो क्या इसके उपयोग को नियंत्रित करने के लिए सेमाफोर उपयुक्त है? मैं कहूंगा: नहीं।
dma_k

स्वीकृत उत्तर में ही उल्लेख किया गया है कि मॉनिटर म्यूचुअल बहिष्करण को लागू कर रहा है। कृपया देखें कि "मॉनिटर ऑब्जेक्ट के सदस्य फ़ंक्शन या तरीके आपसी बहिष्कार को लागू करेंगे, इसलिए केवल एक धागा किसी निश्चित समय पर ऑब्जेक्ट पर कोई कार्रवाई कर सकता है"
achoora

2

जब किसी महत्वपूर्ण क्षेत्र की सुरक्षा के लिए एक सेमाफोर का उपयोग किया जाता है, तो सेमीफोर और डेटा की सुरक्षा के बीच कोई सीधा संबंध नहीं होता है। यह इस कारण का एक कारण है कि कोड के चारों ओर सेमाफोर क्यों फैलाए जा सकते हैं, और प्रतीक्षा या सूचना को कॉल करना क्यों आसान है , इस मामले में, परिणाम क्रमशः पारस्परिक बहिष्कार का उल्लंघन करने या स्थायी रूप से संसाधन को लॉक करने के लिए होगा।

इसके विपरीत, इन खराब चीजों का नीटर मॉनिटर के साथ हो सकता है। एक मॉनिटर सीधे डेटा से थक जाता है (यह डेटा को एनकैप्सुलेट करता है) और, क्योंकि मॉनिटर ऑपरेशन परमाणु क्रियाएं हैं, कोड लिखना असंभव है जो एंट्री प्रोटोकॉल को कॉल किए बिना डेटा तक पहुंच सकता है। मॉनिटर ऑपरेशन पूरा होने पर निकास प्रोटोकॉल स्वचालित रूप से कहा जाता है।

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

ओपन यूनिवर्सिटी M362 यूनिट 3 "इंटरैक्टिंग प्रोसेस" पाठ्यक्रम सामग्री से लिया गया।


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

2

सेमाफोर:

समवर्ती प्रणाली में कुछ साझा संसाधनों तक पहुंच को नियंत्रित करने के लिए एक काउंटर या ध्वज का उपयोग करना, सेमाफोर के उपयोग को दर्शाता है ।

उदाहरण:

  1. किसी भी थिएटर / बस / ट्रेन / फन राइड / क्लासरूम की 50 सीटें (साझा संसाधन) हासिल करने के लिए केवल 50 यात्रियों को अनुमति देने के लिए एक काउंटर। और अगर कोई सीट खाली करता है तो केवल एक नए यात्री को अनुमति देने के लिए।
  2. एक बाइनरी फ्लैग जो किसी भी बाथरूम की मुक्त / कब्जे की स्थिति को दर्शाता है।
  3. ट्रैफिक लाइट झंडे का अच्छा उदाहरण है। वे सड़कों पर वाहनों के पारित होने को विनियमित करके प्रवाह को नियंत्रित करते हैं (साझा संसाधन)

झंडे केवल संसाधन की वर्तमान स्थिति, कोई गणना या संसाधन पर प्रतीक्षा या चल रही वस्तुओं पर कोई अन्य जानकारी प्रकट नहीं करते हैं।

मॉनिटर:

एक मॉनिटर ऑब्जेक्ट में रुचि रखने वाले थ्रेड्स के साथ संचार करके किसी ऑब्जेक्ट तक पहुंच को सिंक्रनाइज़ करता है, जिससे उन्हें एक्सेस प्राप्त करने या किसी स्थिति के सही होने की प्रतीक्षा करने के लिए कहता है।

उदाहरण:

  1. एक पिता अपनी बेटी के लिए एक मॉनिटर के रूप में कार्य कर सकता है, जिससे वह एक बार में केवल एक ही लड़के को डेट कर सकता है।
  2. कक्षा में केवल एक बच्चे को बोलने की अनुमति देने के लिए बैटन का उपयोग करने वाला एक स्कूल शिक्षक।
  3. अंत में एक तकनीकी एक, एक वस्तु पर लेनदेन (धागे के माध्यम से) अखंडता बनाए रखने के लिए सिंक्रनाइज़ किया गया।

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