स्क्रैच से थ्रेड-सुरक्षित कंटेनर क्लास बनाने का प्रयास करने में, मैंने एक्सेस विधियों से मूल्यों को वापस करने की समस्या में भाग लिया है। Windows में उदाहरण के लिए:क्रिटिकल सेक्शन और सी ++
myNode getSomeData()
{
EnterCriticalSection(& myCritSec);
myNode retobj;
// fill retobj with data from structure
LeaveCriticalSection(& myCritSec);
return retobj;
}
अब मुझे लगता है कि विधि के इस प्रकार पर नहीं है सभी धागे की सुरक्षित क्योंकि के बाद कोड महत्वपूर्ण अनुभाग एक और धागा आकर तुरंत पहले धागा से पहले retobj
अधिलेखित करने में सक्षम है विज्ञप्ति रिटर्न। तो retobj
को कॉलर को थ्रेड-सुरक्षित तरीके से वापस करने का एक शानदार तरीका क्या है?
लेकिन retobj ढेर पर संग्रहीत है? जब तक इसे 'स्थैतिक' घोषित नहीं किया जाता है, तब तक आपको प्रतिलिपि किए गए डेटा को ओवरराइट करने में कोई समस्या नहीं होनी चाहिए। –
जब तक कि कुछ अजीब नहीं हो रहा है, 'retobj' ढेर पर होना चाहिए, और प्रत्येक धागे का अपना ढेर होना चाहिए। जब आप प्री-आवंटित मेमोरी के साथ काम कर रहे हों तो इस प्रकार की रेस की स्थिति अधिक आम होती है और साझाकरण को रोकने के लिए एक्सेस को लॉक करना पड़ता है। – ssube
@inface, ठीक है, ठीक है, इसलिए जब तक स्टैक पर वापसी मूल्य संग्रहीत किया जाता है, मैं अच्छा हूं। – ThomasMcLeod