C++ 0x कागज N2427 (एटोमिक्स) मोटे तौर पर निम्नलिखित में कहा गया है। मैं शब्दों को बदल दिया है थोड़ा इसलिए इसकी आसान विशिष्ट घटती स्थिति के लिए पढ़ने के लिए, भागों मैं बदल बोल्ड में हैं:
प्रभाव: atomically मूल्यवस्तु में का परिणाम के साथ बदलें कमीमूल्यऑब्जेक्ट और दिए गए ऑपरेंड में लागू किया गया। आदेश के अनुसार स्मृति प्रभावित है। ये ऑपरेशंस [2323 या उत्तराधिकारी द्वारा जोड़े गए नए खंड] में परिभाषा के साथ "सिंक्रनाइज़" परिभाषा के अर्थ में पढ़-संशोधित-लेखन कार्य हैं, और इसलिए इनपुट मूल्य उत्पन्न करने वाले मूल्यांकन और मूल्यांकन दोनों मूल्यांकन के साथ सिंक्रनाइज़ करते हैं अद्यतन मूल्य पढ़ता है।
रिटर्न: atomically, तुरंत घटती से पहले वस्तु का मूल्य।
परमाणु ऑपरेशन गारंटी देता है कि कमीशन ऑपरेटर ऑपरेशन से ठीक पहले आयोजित वैरिएबल को वापस लौटाएगा, यह परमाणु है इसलिए किसी अन्य धागे द्वारा अपडेट से कोई मध्यवर्ती मूल्य नहीं हो सकता है।
इसका मतलब यह है 2 धागे के साथ हैं इस कोड का केवल संभव फांसी के बाद:
(Initial Value: 1)
Thread 1: Decrement
Thread 1: Compare, value is 0, enter region of interest
Thread 2: Decrement
Thread 2: Compare, value is -1, don't enter region
या
(Initial Value: 1)
Thread 1: Decrement
Thread 2: Decrement
Thread 1: Compare, value is 0, enter region of interest
Thread 2: Compare, value is -1, don't enter region
केस 1 अरुचिकर उम्मीद मामला है।
केस 2 कमी संचालन को रोकता है और बाद में तुलना संचालन निष्पादित करता है। चूंकि कमी-और-fetch ऑपरेशन परमाणु है, इसलिए धागा 1 के लिए तुलना के लिए 0 के अलावा अन्य मान प्राप्त करना असंभव है। यह नहीं प्राप्त कर सकता है क्योंकि ऑपरेशन परमाणु था ... पढ़ने के समय पढ़ने और पर पढ़ने के समय होता है। अधिक धागे इस व्यवहार को नहीं बदलेंगे।
आपको क्यों लगता है कि यह संभव नहीं होना चाहिए? यदि यह एकमात्र ऑपरेशन है जिसे आप 'मायिंट' पर करते हैं तो अंततः यह बह जाएगा। – Patrick
@ पैट्रिक जो अपरिभाषित व्यवहार होगा। –
असली सवाल यह है कि अगर std :: atomic :: ऑपरेटर - परमाणु रूप से पुराना मान देता है। –
cdleonard