2010-01-03 14 views
12

क्या नक्शा प्रकार धागा सुरक्षित है? मेरे पास एक ऐसा प्रोग्राम है जिसमें कई प्रकार के गोरोटिन पढ़ रहे हैं और मानचित्र प्रकार पर लिख रहे हैं। अगर मुझे सुरक्षा तंत्र को लागू करने की आवश्यकता है, तो इसे करने का सबसे अच्छा तरीका क्या है?क्या नक्शा संरचना धागा-सुरक्षित है?

उत्तर

14

आप goroutines का उपयोग करना चाहते हैं और channels के माध्यम से अपने मानचित्र तक पहुंच सिंक्रनाइज़ करना चाहते हैं। the FAQ से स्पष्टीकरण:

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

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

+0

यह बुद्धिमान है लेकिन उन्हें अभी भी दस्तावेज और बनाए रखना चाहिए कि कौन से फ़ंक्शन थ्रेड सुरक्षित हैं। अक्सर मैं कोड में चला जाता हूं जहां पास 1 में मैं मूल्यों के साथ एक नक्शा भरता हूं और पास 2 में मैं इसे एक ही सिंक्रनाइज़ेशन के बिना कई अलग-अलग धागे से समवर्ती रूप से पढ़ता हूं। – Lothar

+0

गो शैली साझा म्यूटेबल राज्य का उपयोग करके कभी भी दृढ़ता से भारित लगती है। यदि आप केवल विभिन्न धागे से मानचित्र पढ़ रहे हैं तो आपको ठीक होना चाहिए। (हालांकि यह पूरी तरह से कहने के बिना नहीं जाता है; वहां व्यावहारिक मानचित्र कार्यान्वयन हैं जो तार्किक पाठों पर शारीरिक रूप से उत्परिवर्तित होते हैं ...) – poolie

1

Go 1.9sync.Map प्रकार का उपयोग करने का सबसे अच्छा तरीका है।

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