जाहिर है, कुछ खोज करने के बाद, "उपभोग ऑपरेशन" एक मेमोरी ऑपरेशन है जहां कई परिचालनों में लोड के बाद मेमोरी से पढ़ा जाने वाला मान उपयोग किया जाता है, और डेटा निर्भरता बनाता है।
स्पष्ट मेमोरी बाड़ पेश किए बिना संचालन आदेश देने में सक्षम होने के नाते, स्पष्ट (मेरी समझ से) लक्ष्य memory_order_consume
का लक्ष्य है।
memory_order_consume
साथ
, संकलक और सीपीयू आवश्यक केवल उन अनुवर्ती लोड और दुकानों जिसका पता या मूल्य लोड मूल्य से गणना के खिलाफ सवाल में लोड ऑर्डर करने के लिए कर रहे हैं। source
इस पाठ में बाद में यह कहते हैं:
/*Example code elided */
प्रमुख मुद्दा है कि atomic_load_explicit()
memory_order_consume
गारंटी का उपयोग कर बाद में होने वाली किसी भी पहुंच प्रारंभ insert_foo()
द्वारा किए गए देखेंगे, भले ही वे कर रहे हैं समवर्ती रूप से निष्पादन, और स्पष्ट स्मृति-बाड़ निर्देशों के ऊपरी हिस्से के बिना। कॉन्सस्ट्रास्ट में, memory_order_acquire
को कमजोर आदेशित सिस्टम पर स्पष्ट स्मृति बाधाओं की आवश्यकता होगी और सभी प्रणालियों पर संकलक अनुकूलन को ओवरक्रेनस्ट्रेन करना होगा।
सी ++ 11 स्टैंडर्ड मसौदा n3485 को परिभाषित करता है memory_order_consume
के रूप में:
29,3 आदेश और स्थिरता [atomics.order]
memory_order_consume: एक लोड आपरेशन प्रभावित पर एक उपभोग कार्रवाई निष्पादित स्मृति स्थान
तो मेरी समझ से यह स्मृति भार ऑर्डर करने के लिए इतना है कि अनुवर्ती लोड और लोड का उपयोग कर स्टोर वास्तव में बाद हो रहा है। दूसरे शब्दों में, लोड उपभोग किया जा रहा है।
स्रोत
2013-03-07 12:26:20
मुझे लगता है कि एंथनी विलियम्स द्वारा "सी ++ कंसुरेंसी इन एक्शन" में अच्छी तरह से समझाया गया है (लेकिन मैं भूल गया)। –
@KerrekSB मुझे लगता है कि यह उस पुस्तक को हासिल करने के लिए मेरे लिए समय हो सकता है। –
@ टोनी थीलियन: हां, वह पुस्तक काफी अच्छी तरह से बताती है –