2013-03-07 7 views
15

मैंने देखा है कि this question on acquire, release, consume, etc मौजूद है, हालांकि, कोई जवाब वास्तव में परिभाषित नहीं करता है कि वास्तव में "उपभोग ऑपरेशन" क्या है।सी ++ 11 मानक में उपभोग ऑपरेशन क्या है?

1.10 में अनुच्छेद 5 यह कहता है:

एक या अधिक स्मृति स्थल पर एक तुल्यकालन आपरेशन या तो एक आपरेशन, एक अधिग्रहण आपरेशन, एक रिलीज आपरेशन, या दोनों एक अधिग्रहण का उपभोग और जारी आपरेशन किया जाता है।

मुझे आश्चर्य हुआ कि अगर कोई यह समझा सकता है कि इसका उपयोग सी ++ 11 मानक की धारा 1.10 में किया गया है?

+1

मुझे लगता है कि एंथनी विलियम्स द्वारा "सी ++ कंसुरेंसी इन एक्शन" में अच्छी तरह से समझाया गया है (लेकिन मैं भूल गया)। –

+1

@KerrekSB मुझे लगता है कि यह उस पुस्तक को हासिल करने के लिए मेरे लिए समय हो सकता है। –

+0

@ टोनी थीलियन: हां, वह पुस्तक काफी अच्छी तरह से बताती है –

उत्तर

9

जाहिर है, कुछ खोज करने के बाद, "उपभोग ऑपरेशन" एक मेमोरी ऑपरेशन है जहां कई परिचालनों में लोड के बाद मेमोरी से पढ़ा जाने वाला मान उपयोग किया जाता है, और डेटा निर्भरता बनाता है।

स्पष्ट मेमोरी बाड़ पेश किए बिना संचालन आदेश देने में सक्षम होने के नाते, स्पष्ट (मेरी समझ से) लक्ष्य 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: एक लोड आपरेशन प्रभावित पर एक उपभोग कार्रवाई निष्पादित स्मृति स्थान

तो मेरी समझ से यह स्मृति भार ऑर्डर करने के लिए इतना है कि अनुवर्ती लोड और लोड का उपयोग कर स्टोर वास्तव में बाद हो रहा है। दूसरे शब्दों में, लोड उपभोग किया जा रहा है।

संबंधित मुद्दे