आप एक सेमाफोर के बजाय एक मॉनिटर का उपयोग क्यों करेंगे?


11

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

जैसा कि मैं इसे समझता हूं, एक मॉनिटर गारंटी देता है कि हर समय एक या कोई भी प्रक्रिया महत्वपूर्ण अनुभाग में नहीं है। हम ठीक वैसा ही हासिल कर सकते हैं जैसे कि एक अर्धवृत्त के साथ। इसके अलावा हम सेमाफ़ोर्स के साथ मॉनिटर (या उन्हें लागू करने की कम से कम एक संभावना) लागू करते हैं।

तो मैं कुछ ऐसा क्यों लागू करूँगा जो बिल्कुल एक सेमाफोर के साथ एक सेमाफोर के समान है? मुझे क्या लाभ मिलेगा?

जवाबों:


8

वे लगभग विनिमेय हैं और एक दूसरे से बाहर बनाया जा सकता है। यह कुछ हद तक निर्भर भाषा है जो कार्यान्वित / पसंदीदा है (उदाहरण के लिए जावा ने "सिंक्रनाइज़" कीवर्ड का उपयोग करके अंतर्निहित मॉनिटर)। हालाँकि, अर्धवृत्त को निम्नलिखित कारणों और अंतरों के लिए मॉनिटर की तुलना में "निचले स्तर" की इकाई माना जाता है:

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

सेमाफोर का उपयोग करते समय एक और अंतर यह है कि एक साझा संसाधन तक पहुंचने वाले प्रत्येक रूटीन को संसाधन का उपयोग करने से पहले ए लॉक को स्पष्ट रूप से प्राप्त करना होगा। मल्टीथ्रेडिंग से निपटने वाली दिनचर्या को कोड करते समय इसे आसानी से भुलाया जा सकता है। सेमाफोर के विपरीत मॉनिटर्स, स्वचालित रूप से आवश्यक ताले प्राप्त कर लेते हैं। [1]

यह भी देखें अत्यधिक मतदान स्टैक अतिप्रवाह उत्तर सेमीफोर बनाम मॉनिटर्स - क्या अंतर है? सार्वजनिक शौचालय और बाइक स्टैंड के लिए एक महान / यादगार सादृश्य के साथ।


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

संदर्भित पाठ यह कहते हुए भ्रामक है कि मॉनिटर का उपयोग करते समय लॉक अधिग्रहण और रिलीज़ करने की कोई आवश्यकता नहीं है। जावा के सिंक्रोनाइज़्ड कीवर्ड का उपयोग करते समय यह सही हो सकता है , लेकिन en.wikipedia.org/wiki/Monitor_(synchronization) के अनुसार , आमतौर पर मॉनिटर के कंडीशन वेरिएबल्स में वेट / सिग्नल कॉल होते हैं जिन्हें एप्लिकेशन में भी लागू किया जाना चाहिए। लेकिन आवेदन में म्यूटेक्स को संभालने की कोई आवश्यकता नहीं है इसलिए शायद उपयोग करना आसान है।
samutamm

5

हमने अंत में चर्चा की कि आप आज व्याख्यान में सेमाफोर के बजाय मॉनिटर का उपयोग क्यों करेंगे।

यह मूल रूप से इस के लिए नीचे आता है: मॉनिटर और सेमाफोर समान रूप से अभिव्यंजक हैं, जिसका अर्थ है कि आप मॉनिटर के साथ समस्या का समाधान पा सकते हैं जहां मूल रूप से एक सेमीफोर का उपयोग किया गया था और इसके विपरीत।

ठीक है, हम पहले से ही जानते थे कि, आप अर्धवृत्त के बजाय मॉनिटर का उपयोग क्यों करेंगे?

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

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


1

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.