यहां कुछ सी ++ कोड जो समानांतर में एकाधिक धागे से पहुंचे हैं।ताले के साथ स्टेटमेंट रीडरिंग
lock.Acquire();
current_id = shared_id;
// small amounts of other code
shared_id = (shared_id + 1) % max_id;
lock.Release();
// do something with current_id
ताला चर के वर्ग POSIX म्युटेक्स कार्यान्वयन के आसपास आवरण है: यह एक महत्वपूर्ण भाग है। मॉड्यूल संचालन के कारण, परमाणु संचालन का उपयोग करना संभव नहीं है।
क्या यह संभव है कि ओ 3 ध्वज वाला एक जीसीसी कंपाइलर कोड को अनुकूलित करता है ताकि चालू_आईडी का असाइनमेंट लॉक से पहले स्थानांतरित हो जाए?
आपका मतलब है "जब तक कि फ़ंक्शन को शुद्ध ** के रूप में चिह्नित नहीं किया जाता है या संकलक यह निर्धारित करने में सक्षम होता है कि ऐसा करना सुरक्षित है ** बेशक। , अंतिम परिणाम वही है, संकलक सामान्य रूप से अनुकूलन नहीं करेगा, जब तक कि यह सत्यापित न हो कि यह सुरक्षित है। – jalf
यदि 'current_id' और' shared_id' दोनों स्थानीय चर हैं जो मौजूदा दायरे से बच नहीं गए हैं (पता किसी और को नहीं दिया गया है, आदि) तो ऑप्टिमाइज़र बाहरी फ़ंक्शन कॉल से संभावित उत्परिवर्तन को अनदेखा कर सकता है। मुझे लगता है कि यह मामला यहां नहीं है, हालांकि – ephemient
@ephemient: लेकिन अगर वे स्थानीय हैं और नहीं बाहरी लोगों में से एक जानता है कि बाहरी फ़ंक्शन कॉल उन्हें कैसे संशोधित कर सकता है? – Kosi2801