यहां कुछ कोड स्निपेट हैं।क्या साझा_ptr स्वैप थ्रेड सुरक्षित है?
std::shared_ptr<int> global(new int(1));
void swapper(int x)
{
std::shared_ptr<int> sp(new int(x));
global.swap(sp);
}
मान लीजिए मैं समानांतर धागे में swapper
फोन करना चाहता था। क्या वह थ्रेडसेफ होगा?
मुझे इस answer से अवगत है। यह दिखाता है कि अगर मैं global
पर मान को पुन: असाइन करता हूं तो पॉइंटर को असाइन करना थ्रेड सुरक्षित नहीं है।
मेरा प्रश्न यह है कि swap
सदस्य फ़ंक्शन स्वयं थ्रेड सुरक्षित है।
एक ओर साझा_ptr के नियंत्रण ब्लॉक फ़ंक्शन थ्रेड सुरक्षित हैं। दूसरी ओर मुझे लगता है कि मैं पॉइंटर्स को नियंत्रण ब्लॉक पर स्विथ कर रहा हूं, इसलिए इसे थ्रेड सुरक्षित नहीं होना चाहिए।
वहां कनेक्शन क्या है? swap
धागा सुरक्षित है?
'स्वैप' को संबोधित किए बिना, यह फ़ंक्शन शायद 'global.reset (नया int (x)) जैसा दिखना चाहिए। – Barry
@ बैरी: अगर आप इसे थ्रेड-सुरक्षित नहीं चाहते हैं। –