यदि मैं चैनलों का सही तरीके से उपयोग कर रहा हूं, तो क्या मुझे समवर्ती पहुंच के खिलाफ सुरक्षा के लिए म्यूटेक्स का उपयोग करने की आवश्यकता है?यदि मैं चैनलों का सही उपयोग कर रहा हूं तो मुझे म्यूटेक्स का उपयोग करने की आवश्यकता है?
उत्तर
यदि आप चैनलों का सही ढंग से उपयोग करते हैं तो आपको म्यूटेक्स की आवश्यकता नहीं है। कुछ मामलों में म्यूटेक्स के साथ एक समाधान हालांकि सरल हो सकता है।
बस सुनिश्चित करें कि एकाधिक गुणों को चैनल चरों तक पहुंचने का प्रयास करने से पहले चैनल मानों को धारण करने वाले चर को ठीक से प्रारंभ किया गया है। एक बार ऐसा करने के बाद, चैनलों तक पहुंच (जैसे मूल्यों को मूल्य भेजना या प्राप्त करना) डिज़ाइन द्वारा सुरक्षित है। संदर्भ (emphases मेरे द्वारा जोड़ा) के साथ
सहायक दस्तावेज:
एक चैनल send statements में इस्तेमाल किया जा सकता receive operations, और बिल्ट-इन कार्य
cap
औरlen
करने के लिए कॉल बिना किसी सिंक्रनाइज़ेशन के बिना goroutines की किसी भी संख्या से। चैनल पहले-इन-फर्स्ट-आउट कतार के रूप में कार्य करते हैं। उदाहरण के लिए, यदि एक गोरौटाइन चैनल पर मूल्य भेजता है और दूसरा गोरौटाइन उन्हें प्राप्त करता है, तो भेजे गए क्रम में मूल्य प्राप्त होते हैं।
Effective Go: Concurrency: Share by communicating
समवर्ती प्रोग्रामिंग कई वातावरण में साझा चर करने के लिए सही पहुँच को लागू करने के लिए आवश्यक बारीकियों से मुश्किल बना दिया है। जाओ एक अलग दृष्टिकोण को प्रोत्साहित करता है जिसमें चैनलों पर साझा मूल्यों को पारित किया जाता है और वास्तव में, निष्पादन के अलग-अलग धागे द्वारा सक्रिय रूप से साझा नहीं किया जाता है। किसी भी समय किसी एक goroutine के मूल्य तक पहुंच है। डिज़ाइन द्वारा डेटा दौड़ नहीं हो सकती है। सोचने के इस तरीके को प्रोत्साहित करने के लिए हमने इसे एक नारे में घटा दिया है:
स्मृति साझा करके संवाद न करें; इसके बजाय, संचार करके स्मृति साझा करें।
इस दृष्टिकोण को बहुत दूर ले जाया जा सकता है। उदाहरण के लिए, एक पूर्णांक चर के चारों ओर एक mutex डालकर संदर्भ गणना सबसे अच्छी हो सकती है। लेकिन एक उच्च स्तरीय दृष्टिकोण के रूप में, उपयोग को नियंत्रित करने के लिए चैनलों का उपयोग करना स्पष्ट, सही प्रोग्राम लिखना आसान बनाता है।
यह लेख भी बहुत उपयोगी है: The Go Memory Model
इसके अलावा sync
के पैकेज दस्तावेज़ से उद्धृत:
पैकेज सिंक इस तरह के पारस्परिक अपवर्जन ताले के रूप में बुनियादी तुल्यकालन पुरातन प्रदान करता है। एक बार और प्रतीक्षा समूह प्रकार के अलावा, अधिकतर निम्न-स्तरीय लाइब्रेरी दिनचर्या के उपयोग के लिए लक्षित हैं। चैनल और संचार के माध्यम से उच्च स्तरीय सिंक्रनाइज़ेशन बेहतर किया जाता है।
- 1. यदि मैं यूटीएफ -8 वर्णसेट का उपयोग कर रहा हूं तो क्या मुझे विशेष वर्णों के लिए HTML इकाइयों का उपयोग करने की आवश्यकता है?
- 2. क्या मुझे कस्टम UITableViewCell का उपयोग कर रहा है, तो मुझे ऊंचाईForRowAtIndexPath सेट करने की आवश्यकता है?
- 3. क्या मैं CNCopyCurrentNetworkInfo का सही उपयोग कर रहा हूं?
- 4. क्या मैं `all` का सही उपयोग कर रहा हूं?
- 5. क्या मैं सूचियों का सही उपयोग कर रहा हूं?
- 6. क्या मैं सेवा परत का सही उपयोग कर रहा हूं?
- 7. मुझे Adapter.notifyDataSetChanged() का उपयोग करने की आवश्यकता क्यों नहीं है?
- 8. क्या मैं फ़ंक्शन संरचना का सही उपयोग कर रहा हूं?
- 9. यदि मैं PHP का उपयोग कर रहा हूं तो मैं c10k समस्या का समाधान कैसे कर सकता हूं?
- 10. यदि Emacs X का उपयोग कर रहा है तो मैं elisp में कैसे बता सकता हूं?
- 11. यदि मैं संग्रहीत प्रक्रियाओं का उपयोग कर रहा हूं तो क्या मैं एक ओआरएम का उपयोग करूंगा?
- 12. क्या मुझे अस्थिर कीवर्ड का उपयोग करने की आवश्यकता है यदि मैं म्यूटेक्स के बीच एक चर घोषित करता हूं और इसे वापस करता हूं?
- 13. मुझे MPI_Barrier() का उपयोग करने की आवश्यकता कब होगी?
- 14. सेलेनियम वेबड्राइवर - isDisplayed() का उपयोग कर रहा है यदि कथन
- 15. जब मैं गिट का उपयोग कर रहा हूं, तो क्या मुझे विलय करने से पहले मुझे रिबेस करना चाहिए?
- 16. Boost.Lockfree कतार का उपयोग म्यूटेक्स
- 17. मुझे sqlalchemy back_populates का उपयोग करने की आवश्यकता कब होगी?
- 18. मुझे उस वर्ग का उदाहरण बनाने की आवश्यकता क्यों है जिसमें मैं काम कर रहा हूं?
- 19. जब मैं जेपीए का उपयोग कर रहा हूं तो मैं डेटाबेस विकास कैसे प्रबंधित करूं?
- 20. यदि कोई वर्ग सदस्यों की आवश्यकता नहीं है तो स्थिर कार्यों का उपयोग करना बेहतर है?
- 21. कोहाना का मैं किस संस्करण का उपयोग कर रहा हूं?
- 22. क्या मैं जूलिया का उपयोग कर रहा हूं?
- 23. मैं एक गोटो स्टेटमेंट का उपयोग करने जा रहा हूं
- 24. अगर कोई पर्ल का उपयोग नहीं कर रहा है तो मैं निर्देशिका कैसे बना सकता हूं?
- 25. यदि कोई उपयोग क्लॉज का उपयोग किया जाता है तो क्या डीबीकनेक्शन बंद करने की आवश्यकता है?
- 26. मैं किस डेटा संरचना का उपयोग कर रहा हूं?
- 27. मैं फोनगैप का उपयोग कर रहा हूं और अपने पृष्ठों में मैं FontAwesome का उपयोग करने की कोशिश कर रहा हूं लेकिन यह काम नहीं करता है?
- 28. नियंत्रण का उपयोग - पैटर्न की आवश्यकता है
- 29. अगर मैं वर्चुअलएन्व का उपयोग करता हूं तो मुझे योनि का उपयोग क्यों करना चाहिए?
- 30. कई म्यूटेक्स ताले का उपयोग
हालांकि यह एक महान सामान्य दिशानिर्देश है, मुझे लगता है कि हमें वास्तव में "इस दृष्टिकोण को बहुत दूर ले जाया जा सकता है।" चेतावनी। मैंने इस से बहुत जटिल कोड स्टेम का एक * बहुत * देखा है, रिएक्टर लूप और संदेश गुजरने की गड़बड़ी के साथ, जहां एक साधारण म्यूटेक्स पर्याप्त होगा। मैं समस्या के बारे में कैसे सोचना पसंद करता हूं: यदि आप * एकल * तार्किक संसाधन के आसपास "पारस्परिक बहिष्करण" प्रदान करने का प्रयास कर रहे हैं, तो आप शायद एक म्यूटेक्स चाहते हैं।यदि आप goroutines को समन्वयित करने और सिंक्रनाइज़ेशन पॉइंट प्रदान करने का प्रयास कर रहे हैं, तो आप चैनल चाहते हैं। (बीच में सब कुछ अनुभव के साथ आता है) – JimB