यह निर्भर करता है कि आप "सरणी" और "साझा करें" को कैसे परिभाषित करते हैं।अब तक सरणी चला जाता है के रूप में, वहाँ दो मामलों में अलग से विचार करने की आवश्यकता है कि कर रहे हैं:
- फिक्स्ड आकार सरणियों (घोषित
my @a[$size]
); इसमें निश्चित आयामों के साथ बहु-आयामी सरणी शामिल हैं (जैसे my @a[$xs, $ys]
)। इनकी दिलचस्प संपत्ति है कि उन्हें समर्थन देने वाली स्मृति का आकार कभी नहीं बदला जाना चाहिए।
- गतिशील सरणी (घोषित
my @a
), जो मांग पर बढ़ती है। ये, हुड के नीचे, वास्तव में समय के साथ स्मृति के कई हिस्सों का उपयोग करते हुए बढ़ते हैं।
अब तक साझा करने के रूप में चला जाता है, वहाँ भी तीन मामलों हैं:
- मामले में जहां एक से अधिक थ्रेड अपने जीवनकाल में सरणी स्पर्श करते हैं, लेकिन केवल एक कभी एक समय में यह छू जा सकता है, की वजह से कुछ समवर्ती नियंत्रण तंत्र या समग्र कार्यक्रम संरचना। इस मामले में सरणी को "सरणी का उपयोग कर समवर्ती संचालन" के अर्थ में कभी साझा नहीं किया जाता है, इसलिए डेटा रेस रखने की कोई संभावना नहीं है।
- केवल पढ़ने योग्य, गैर आलसी मामला। यह वह जगह है जहां कई समवर्ती संचालन एक गैर-आलसी सरणी तक पहुंचते हैं, लेकिन केवल इसे पढ़ने के लिए।
- पढ़ना/लिखना मामला (जब पढ़ता है वास्तव में एक लिखने का कारण बनता है क्योंकि सरणी को आलसी मूल्यांकन की मांग करने वाले कुछ सौंपा गया है; ध्यान दें कि यह निश्चित आकार के सरणी के लिए कभी नहीं हो सकता है, क्योंकि वे कभी आलसी नहीं होते हैं)। इस प्रकार
तब हम सुरक्षा को संक्षेप में प्रस्तुत कर सकते हैं:
| Fixed size | Variable size |
---------------------+----------------+---------------+
Read-only, non-lazy | Safe | Safe |
Read/write or lazy | Safe * | Not safe |
* चेतावनी का संकेत है, जबकि यह देखने के पर्ल 6 के दृष्टिकोण से सुरक्षित हो, आपको निश्चित रूप से सुनिश्चित करें कि आप नहीं कर रहे हैं बनाने के लिए है एक ही सूचकांक के साथ विरोधाभासी चीजें।
तो संक्षेप में, निश्चित आकार सरणी आप सुरक्षित रूप से साझा कर सकते हैं और अलग-अलग थ्रेडों के तत्वों को असाइन कर सकते हैं "कोई समस्या नहीं है" (लेकिन झूठी साझाकरण से सावधान रहें, जो आपको ऐसा करने के लिए भारी प्रदर्शन दंड का भुगतान कर सकता है)। गतिशील सरणी के लिए, यह केवल सुरक्षित है अगर उन्हें केवल उस अवधि के दौरान ही पढ़ा जाएगा जब वे साझा किए जा रहे हैं, और फिर भी यदि वे आलसी नहीं हैं (हालांकि दिया गया सरणी असाइनमेंट अधिक उत्सुक है, तो आप उस स्थिति को हिट करने की संभावना नहीं रखते हैं गलती से)। लेखन, यहां तक कि विभिन्न तत्वों के लिए, बढ़ते संचालन के कारण डेटा हानि, क्रैश या अन्य बुरे व्यवहार का जोखिम है।
तो, मूल उदाहरण पर विचार करते हुए, हम my @copy;
और my @length;
गतिशील सरणी देखते हैं, इसलिए हमें समवर्ती परिचालनों में उन्हें नहीं लिखना चाहिए। हालांकि, ऐसा होता है, इसलिए कोड को सुरक्षित नहीं किया जा सकता है।
अन्य पद पहले से ही बेहतर दिशाओं में इशारा करते हुए एक सभ्य नौकरी करते हैं, लेकिन किसी ने भी गोरी के विवरणों को नकार दिया।
स्रोत
2017-05-04 21:00:58
वादे का पूरा बिंदु यह है कि कुछ वापस करने का वादा, आप जानबूझकर 'स्टार्ट' स्टेटमेंट उपसर्ग से कुछ भी उपयोगी नहीं कर रहे हैं। –
लेकिन 'स्टार्ट' अधिक करता है तो केवल कुछ लौटाता है। मुझे समानांतर में कोड चलाने के लिए समवर्ती भाग में रूचि है ताकि मेरे सीपीयू के सभी कोरों को काम करना पड़े। –
मैं जो कह रहा हूं वह एक रिंच लेने के लिए है, और फिर इसे नाखून में पाउंड करने के लिए उपयोग करना है। कौन सा काम करता है, ... मुझे लगता है। –