2012-02-20 31 views

उत्तर

9

std::launch::async | std::launch::deferred की लॉन्च नीति का अर्थ है कि कार्यान्वयन यह चुन सकता है कि std::launch::async या std::launch::deferred की नीति लागू करना है या नहीं। यह विकल्प कॉल से कॉल में भिन्न हो सकता है, और तुरंत निर्णय नहीं लिया जा सकता है।

एक कार्यान्वयन जो हमेशा एक या दूसरे को चुनता है वह कानूनी है (जो जीसीसी करता है, हमेशा स्थगित चुनता है), जैसा कि std::launch::async चुनता है जब तक कि कुछ सीमा तक नहीं पहुंच जाती है, और फिर std::launch::deferred पर स्विच हो जाती है।

इसका यह भी अर्थ है कि कार्यान्वयन बाद में पसंद को रोक सकता है। इसका अर्थ यह है कि कार्यान्वयन तब तक निर्णय लेने के लिए इंतजार कर सकता है जब तक कि उसके हाथ को उस कॉल द्वारा मजबूर नहीं किया जाता है, जिसमें स्थगित और एसिंक कार्यों से स्पष्ट रूप से अलग प्रभाव पड़ते हैं, या जब तक चलने वाले कार्यों की संख्या आंतरिक कार्य सीमा से कम न हो। यह just::thread करता है।

कार्यों कि निर्णय के लिए मजबूर कर रहे हैं: wait(), get(), wait_for(), wait_until(), और पिछले भविष्य वस्तु परिणाम को संदर्भित करने का नाशक।

+3

क्या, जीसीसी हमेशा 'स्थगित' का उपयोग करता है? अच्छा, "कार्यान्वयन को यह तय करने दें कि आपके लिए सबसे अच्छा क्या है";) –

3

Chaprer आईएसओ आईईसी 14,882-2011 की 30.6.8 बताते हैं कि इसका मतलब है launch::async | launch::deferredimplementations should defer invocation or the selection of the policy when no more concurrency can be effectively exploited (समान policy रूप async बिना पैरामीटर)।

प्रैक्टिस में इसका मतलब यह है कि सी ++ रनटाइम प्रत्येक async के लिए नए थ्रेड शुरू कर देना चाहिए जब तक अप्रयुक्त CPU कोर न हों।

+0

हाँ मैंने देखा, लेकिन अभ्यास में इसका क्या अर्थ है? – ronag

+1

फॉलोग उद्धरण मिला जो इसे मेरे लिए स्पष्ट बनाता है: "यह कार्यान्वयन पर निर्भर है कि अतुल्यकालिक निष्पादन या आलसी मूल्यांकन करना है या नहीं।" – ronag

+0

ऑफटॉपिक: लेकिन स्थगित लॉन्च के साथ क्या होता है जब '.get()' कभी नहीं कहा जाता है और भविष्य को आसानी से नष्ट कर दिया जाता है? – ronag

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