2011-11-22 14 views
8

यह std::map की थ्रेड सुरक्षा के बारे में है। अब, एक साथ पढ़ने थ्रेड-सुरक्षित हैं लेकिन लिखते नहीं हैं। मेरा सवाल यह है कि यदि मैं हर बार मानचित्र में अद्वितीय तत्व जोड़ता हूं, तो क्या यह थ्रेड-सुरक्षित होगा?सी ++ मानचित्रों की थ्रेड-सुरक्षा

  1. तो, एक उदाहरण के लिए, यदि मैं यह std:map<int, std::string> myMap की तरह एक नक्शा है और मैं हमेशा नए चाबियाँ जोड़ने और मौजूदा मुख्य मान को संशोधित कभी नहीं, कि धागे की सुरक्षित हो जाएगा?

  2. अधिक महत्वपूर्ण बात यह है कि क्या मुझे कोई यादृच्छिक रन-टाइम व्यवहार मिलेगा?

  3. नई कुंजी जोड़ना भी संशोधन माना जाता है? यदि जोड़ने के दौरान चाबियाँ हमेशा अलग होती हैं, तो क्या यह थ्रेड-सुरक्षित नहीं होना चाहिए क्योंकि यह स्मृति के एक स्वतंत्र भाग को संशोधित करता है?

धन्यवाद शिव

+0

नहीं, यह धागा सुरक्षित नहीं होगा, क्योंकि दो धागे एक ही स्थान पर दो (अद्वितीय) आइटम जोड़ सकते हैं जो एक ही स्थान पर जाएंगे। –

+0

मानक कंटेनरों से आप जिस थ्रेड सुरक्षा की अपेक्षा कर सकते हैं वह यह है कि यदि कंटेनर कभी संशोधित नहीं होता है और प्रत्येक धागा ** ** अलग ** तत्व तक पहुंचता है (पढ़ता है या लिखता है), तो यह ठीक होना चाहिए। –

उत्तर

14

1) बेशक नहीं

2) हाँ, मुझे आशा है कि आप परीक्षण के दौरान यह मुठभेड़ होगा, नहीं बाद में

3) हाँ, यह है। नया तत्व एक अलग स्थान में जोड़ा जाता है, लेकिन इसके दौरान कई पॉइंटर्स संशोधित होते हैं।

मानचित्र सभी प्रकार के वृक्षों द्वारा लागू किया जाता है यदि सभी कार्यान्वयन नहीं होते हैं। एक पेड़ में एक नया तत्व डालने से विभिन्न नोड्स को इंगित करने के लिए पॉइंटर्स को रीसेट करने के माध्यम से नोड्स को पुन: व्यवस्थित करके संशोधित किया जाता है। तो यह धागा सुरक्षित नहीं है

+1

+1, बिल्कुल .... –

+0

@armen तब सबसे अच्छा विकल्प क्या है? –

+0

@EdwinVivekN: एसटीएल कंटेनरों के साथ मिलकर काम करते समय आपको बाहरी सिंक्रनाइज़ेशन तंत्र (उदा। म्यूटेक्स) का उपयोग करने की आवश्यकता है –

0

नहीं, हाँ, हाँ। कंटेनर को संशोधित करते समय आपको विशेष लॉक प्राप्त करने की आवश्यकता है (नई चाबियों को सम्मिलित करने सहित), हालांकि, आप पर कोई संशोधन नहीं होने पर, निश्चित रूप से, एक साथ सुरक्षित रूप से पढ़ सकते हैं।

संपादित करें: http://www.sgi.com/tech/stl/thread_safety.html आपके लिए ब्याज का हो सकता है।

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