मेरे लिए अब यह कार्यात्मक रूप से Semaphore.WaitOne/Release
Monitor.Wait/Pulse
के बराबर दिखता है। इंटरप्रोसेस क्षमताओं को छोड़ना, गति (हाँ, मॉनीटर प्रबंधित है) अन्य गैर-कार्यात्मक मतभेद, फिर वास्तविक अंतर क्या है?सेमफोर। वैटोन/रिलीज बनाम मॉनिटर। पल्स/रुको
उत्तर
Semaphore
का मुख्य उद्देश्य संसाधनों के एक सीमित सेट तक पहुंच नियंत्रित करना है। थ्रेड WaitOne
और Release
पर कॉल करके पुनर्विक्रय अधिग्रहण में भाग ले सकता है। संसाधन प्राप्त करने के लिए एक थैड को WaitOne
पर कॉल करना चाहिए। हालांकि, यह केवल तब ही अवरुद्ध होगा जब सेमफोर की गणना 0 तक पहुंच जाती है अन्यथा थ्रेड तुरंत प्राप्त करने के लिए स्वतंत्र होता है। एक बार थ्रेड समाप्त होने के बाद इसे Release
पर सेमफोर सिग्नल करने के लिए कॉल करना चाहिए कि एक अतिरिक्त थ्रेड को किसी अन्य थ्रेड के लिए मुक्त कर दिया गया है।
Monitor.Wait
और Monitor.Pulse
बहुत अलग हैं। सबसे पहले और सबसे महत्वपूर्ण कोई गिनती शामिल नहीं है। Pulse
किसी भी कॉल की अनुपस्थिति में Wait
पर कॉल किया जाता है तो सिग्नल को अनदेखा और त्याग दिया जाता है। यह उसी तरह से कतारबद्ध नहीं है जैसे एक सेमफोर होगा। वास्तव में, Wait
और Pulse
का व्यवहार कोई अंतर्निहित अर्थ नहीं है। Wait
बस अधिग्रहण लॉक की स्थिति में बदलाव की प्रतीक्षा कर रहा है (Monitor.Enter
से अधिग्रहित)। Pulse
संकेत है कि कुछ बदल गया है। यही कारण है कि आप अक्सर Wait
को while
लूप में बुलाते हैं। प्रतीक्षा धागे को प्रतीक्षा की स्थिति को फिर से रखना चाहिए क्योंकि इसमें कोई जानकारी नहीं है कि क्या बदल गया है!
Monitor.Wait
और Monitor.Pulse
मौलिक सिंक्रनाइज़ेशन तंत्र हैं जिनका उपयोग सेफफोर्स समेत किसी भी अन्य सिंक्रनाइज़ेशन डिवाइस को बनाने के लिए किया जा सकता है।
मॉनिटर। वैट/पल्स आपको एक शर्त चर प्रदान करता है, जो एक सेमफोर (लेकिन बिल्कुल नहीं) की तुलना में ऑटो-रीसेट ईवेंट की तरह है। मुख्य अंतर यह है कि एक सेमफोर की गिनती होती है, जिसका मतलब है कि आपको कुछ भी लॉक करने की आवश्यकता नहीं है ताकि आप सुनिश्चित कर सकें कि आपको नाड़ी याद नहीं है (मॉनिटर.एट के विपरीत)।
- 1. pthread_cond_wait बनाम सेमफोर
- 2. मॉनिटर बनाम Mutex
- 3. मॉनिटर बनाम WaitHandle आधारित धागा सिंक
- 4. Thread.sleep बनाम मॉनिटर। वैट बनाम पंजीकृत WaitHandle?
- 5. जीएलएसएल, सेमफोर?
- 6. मॉनिटर
- 7. SystemClock.sleep() बनाम थ्रेड.sleep() एक सेमफोर लूप की प्रतीक्षा करते समय
- 8. गारंटीकृत सेमफोर ऑर्डर?
- 9. PHP सेमफोर विकल्प?
- 10. सेमफोर कार्यान्वयन। वर्तमान में
- 11. सेमफोर और सिंक्रनाइज़ेशन
- 12. सेमफोर टाइमआउट अवधि
- 13. .NET रिवर्स सेमफोर?
- 14. सेमफोर और समवर्ती प्रोग्रामिंग
- 15. सेमफोर सरल नमूना
- 16. मॉनिटर। एंटर और मॉनिटर। विभिन्न धागे
- 17. ToolTip मॉनिटर
- 18. अन्य मॉनिटर
- 19. मॉनिटर प्रिंटिंग
- 20. दूसरी मॉनिटर
- 21. मॉनिटर .net
- 22. अच्छा प्रोग्रामिंग मॉनिटर: वास्तविक प्रदर्शन आयाम बनाम विकर्ण "विपणन" आकार?
- 23. गैर अवरोधक सेमफोर क्या है?
- 24. एमबीन सरल ग्राफ मॉनिटर
- 25. मॉनिटर .NET थ्रेड
- 26. जावा प्रोग्रेस मॉनिटर
- 27. मॉनिटर ऐप्स पावर उपयोग
- 28. मॉनिटर नेटवर्क यातायात मैक
- 29. कस्टम मॉनिटर रेज़ोल्यूशन जावा
- 30. मॉनिटर का उद्देश्य। पल्स
यह वाकई शानदार जवाब है! यह मेरे लिए चीजों को मंजूरी दे दी! – Andrey
'पल्स' को सिग्नल के रूप में मानना अक्सर अच्छा होता है कि कुछ "हो सकता है" बदल जाता है। आवश्यक विचार यह है कि यदि किसी विधि को कुछ फैशन में संसाधन बदलने की प्रतीक्षा की जाती है (उदाहरण के लिए इसमें कोई डेटा है), और वह परिवर्तन केवल उस कोड द्वारा किया जा सकता है जिसमें उस संसाधन पर लॉक होता है, पूर्व विधि परीक्षण कर सकता है कि परिवर्तन हुआ है और, यदि नहीं, तो लॉक पर 'Monitor.Wait' पर कॉल करें। यदि लॉक किए गए संसाधनों को बदलने वाली प्रत्येक विधि 'पल्सएल' कहती है, तो कोई भी व्यक्ति जो बदलाव की प्रतीक्षा कर रहा है, उसे जागृत कर दिया जाएगा और यह देखने का मौका दिया जाएगा कि वह किस बदलाव का इंतजार कर रहा है या नहीं। – supercat