2012-03-01 2 views
12

मुझे इस तथ्य से अवगत है कि मानक पुस्तकालय के कंटेनर थ्रेड-सुरक्षित नहीं हैं। इसके द्वारा मैं सोचता था कि एक कंटेनर, std::list प्रकार के बारे में कहता है, एक साथ एक से अधिक थ्रेड द्वारा उपयोग नहीं किया जा सकता है (जिनमें से कुछ कंटेनर को संशोधित कर सकते हैं)। लेकिन अब ऐसा लगता है कि आंखों की तुलना में इसके लिए और भी कुछ है; कुछ और सूक्ष्म, कुछ भी इतना स्पष्ट नहीं, कम से कम मेरे लिए।बहु-थ्रेडेड अनुप्रयोग में स्थानीय चर के रूप में मानक कंटेनर

void log(std::string msg, severity s, /*...*/) 
{ 
    return; //no code! 
} 

इस सूत्र-सुरक्षित है:

उदाहरण के लिए, इस समारोह जो मूल्य से पहले तर्क स्वीकार करता है पर विचार?

पहले, ऐसा लगता है कि यह थ्रेड-सुरक्षित है, क्योंकि फ़ंक्शन बॉडी कोई साझा संशोधित संसाधनों को एक्सेस नहीं करता है, इसलिए थ्रेड-सुरक्षित। दूसरी सोचा पर, यह है कि मेरे पास आता है जब इस तरह के एक समारोह, प्रकार std::string का एक उद्देश्य बनाया जाएगा, जो पहले तर्क है लागू है, और मैं, लगता है कि इस वस्तु के निर्माण थ्रेड-सुरक्षित नहीं है के रूप में यह आंतरिक रूप से std::allocator का उपयोग करता है , जो मुझे विश्वास है कि थ्रेड-सुरक्षित नहीं है। इसलिए इस तरह के एक समारोह का आह्वान थ्रेड-सुरक्षित नहीं है। लेकिन अगर यह सही है, तो इसके बारे में क्या:

void f() 
{ 
    std::string msg = "message"; //is it thread-safe? it doesn't seem so! 
} 

क्या मैं सही जा रहा हूं? क्या हम मल्टी-थ्रेडेड प्रोग्राम में std::string (या कोई कंटेनर जो std::allocator आंतरिक रूप से उपयोग करते हैं) का उपयोग कर सकते हैं?

मैं विशेष रूप से साझा वस्तुओं के विपरीत स्थानीय चर के रूप में कंटेनर के बारे में बात कर रहा हूं।

मैंने Google की खोज की और बिना किसी ठोस उत्तर के कई समान संदेह पाए। मैं उसके रूप में इसी तरह समस्या का सामना:

पर विचार करें सी ++ 03 और सी ++ 11, दोनों।

+0

नवाज - क्या आप जानते हैं कि सी ++ के कार्यान्वयन के बारे में वे किस बारे में बात कर रहे हैं: http://www.sgi.com/tech/stl/Allocators.html यह बताता है कि डिफ़ॉल्ट आवंटक थ्रेडसेफ है। – Sid

+0

@ सिड: यह मानक पुस्तकालय नहीं है; वे बहुत सारी चीजों का समर्थन करते हैं जो stdlib नहीं करता है। – Nawaz

+0

ठीक है, व्याकुलता के बारे में खेद है। – Sid

उत्तर

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