2009-05-23 11 views
11

monitor और lock के बीच क्या अंतर है?मॉनिटर और लॉक के बीच अंतर?

यदि लॉक केवल पारस्परिक बहिष्करण का कार्यान्वयन है, तो क्या मॉनिटर बस विधि निष्पादन के भीतर प्रतीक्षा समय का उपयोग करने का एक तरीका है?

एक अच्छा विवरण बहुत उपयोगी धन्यवाद होगा ....

संबंध

उत्तर

13

सी # .NET में उदाहरण के लिए एक ताला बयान के बराबर है।

संपादित करें: .NET फ़्रेमवर्क के बाद के संस्करणों में, इस में बदल गया था:

bool lockTaken = false; 
try 
{ 
    Monitor.Enter(object, ref lockTaken); 
    // Your code here... 
} 
finally 
{ 
    if (lockTaken) 
    { 
     Monitor.Exit(object); 
    } 
} 
+0

@ जॉन गेटज़न: कमाल ...महान व्याख्या के लिए thx। – IAbstract

4

वे संबंधित कर रहे हैं। उदाहरण के लिए, सी # lock कथन में entering a Monitor और exiting one के दौरान एक सरल प्रयास-अंततः रैपर होता है। हालांकि, यह ध्यान रखें

Monitor.Enter(object); 
try 
{ 
    // Your code here... 
} 
finally 
{ 
    Monitor.Exit(object); 
} 

कि मॉनिटर भी कर सकते हैं Wait() और Pulse() है, जो अक्सर जटिल बहु सूत्रण स्थितियों में उपयोगी हैं:

1

मॉनिटर्स संकलक से प्राप्त "अर्द्ध स्वचालित" ताले हैं। वे कक्षाओं, आदि पर synchronized विधियों की घोषणा करने की अनुमति देते हैं। यह आपसी बहिष्करण प्रदान करने के लिए एक अलग दृष्टिकोण है। मुझे this book अवधारणाओं का सबसे व्यापक स्पष्टीकरण माना गया, भले ही यह ज्यादातर ओएस डेवलपर्स की ओर तैयार हो।

0

एक लॉक पारस्परिक बहिष्करण सुनिश्चित करता है।

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

0

मॉनीटर एक प्रोग्रामिंग-भाषा निर्माण है जो सेमीफ़ोरेस/ताले के समान काम करता है, लेकिन मॉनीटर रन टाइम पर सिंक्रनाइज़ करके साझा डेटा को नियंत्रित करते हैं। इसके विपरीत, ताले साझा डेटा को केवल "कताई" से सुरक्षित करते हैं जिससे खराब CPU उपयोग हो सकता है।

-1

केवल आपसी निष्कासन पर ध्यान केंद्रित करें, लेकिन मोनिटर आपसी बहिष्करण स्वचालित रूप से प्रदान करता है।

इसलिए हमें मॉनीटर में आपसी बहिष्करण का उपयोग करने की चिंता करने की आवश्यकता नहीं है। मेरे बजाय, हमें केवल प्रोग्रामिंग करते समय सिक्रोनज़िंग की आवश्यकता होती है।

मोनिटर प्रोग्रामिंग का अधिक व्यवस्थित तरीका प्रदान करता है। यह, इसके लिए, अधिक उन्नत है।

0

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

-1

मॉनीटर अवधारणा है और लॉक वास्तविक कार्यान्वयन है।

संबंधित मुद्दे