2017-07-18 7 views
14

मैं std::to_string का उपयोग कर स्ट्रिंग के लिए पूर्णांक प्रकार परिवर्तित करने के लिए देख रहा हूँ, लेकिन मैं इस पैरा देखा:क्या std :: to_string धागा सुरक्षित है?

std::to_string स्वरूपण प्रयोजनों के लिए std::locale पर निर्भर करता है, और इसलिए समवर्ती कॉल std::to_string को एक से अधिक थ्रेड से मई आंशिक क्रमबद्धता में परिणाम कॉल का

लेकिन मुझे इस विषय पर कुछ और नहीं मिला, Google ने कुछ भी नहीं किया, जैसा कि एमएसडीएन ने किया था। यदि यह मायने रखता है तो मैं विजुअल स्टूडियो 2013 का उपयोग कर रहा हूं।

क्या यह धागा सुरक्षित है? यदि हां, तो कैसे?

+8

उस उद्धरण के बारे में कुछ भी नहीं कहता है कि यह थ्रेड सुरक्षित नहीं है। यह सिर्फ इतना है कि एकाधिक कॉल एक साथ नहीं चल सकते हैं। यह एक प्रदर्शन मुद्दा है, सुरक्षा नहीं है। – NathanOliver

+1

@Nathan Begs सवाल std :: locale thread सुरक्षित है? –

+1

@NeilButterworth इसके हिस्सों नहीं हैं। उदाहरण के लिए 'setlocale' थ्रेड सुरक्षित नहीं है, इसलिए' std :: to_string' एक म्यूटेक्स का उपयोग कर सकता है ताकि यह सुनिश्चित किया जा सके कि एकाधिक कॉल दौड़ने पर दौड़ न जाए। – NathanOliver

उत्तर

7

std::to_string व्यवहार करती है जैसे कि वह कहता है sprintf ([string.conversions]/7), और sprintf के व्यवहार वैश्विक वातावरण, जो setlocale (या std::locale::global, जो आंतरिक रूप से कहता है setlocale द्वारा) द्वारा संशोधित किया जा सकता पर निर्भर करता है।

[clocale.syn]/2 में शब्दों क्योंकि यह setlocalestd::to_string या sprintf साथ एक डेटा दौड़ शुरू करने की अनुमति नहीं है, यह सूचित करते हैं कि std::to_string धागा सुरक्षित है लगता है।

+0

विस्तृत उत्तर के लिए धन्यवाद – roybj

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