C++ Academy · पाठ

std::async और std::future की मूल बातें

कार्य asynchronous रूप से चलाएँ और std::future के माध्यम से उनके परिणाम प्राप्त करें।

पाठ 4, कुल 4 में से14 चरण

std::async और std::future की मूल बातें, CoddyKit पर C++ Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह C++ Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C++ Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

असिंक्रोनस कार्य

std::async किसी फ़ंक्शन को असिंक्रोनस रूप से चलाता है और एक std::future लौटाता है, जो परिणाम उपलब्ध कराता है। यह थ्रेड को स्वयं सँभालने का उच्च-स्तरीय विकल्प है।

मूल उपयोग

कॉल करने योग्य ऑब्जेक्ट और तर्क पास करें। std::async एक std::future<Result> लौटाता है।

#include <future>

int compute() { return 42; }

std::future<int> f = std::async(compute);
int result = f.get();   // blocks until done

लॉन्च नीतियाँ

पहला तर्क यह नियंत्रित करता है कि कार्य कब चलेगा:

  • std::launch::async — तुरंत नया थ्रेड शुरू करें
  • std::launch::deferred — get() पर समकालिक रूप से चलाएँ
  • डिफ़ॉल्ट (कोई नीति नहीं) — कार्यान्वयन स्वयं चुनता है
auto f = std::async(std::launch::async, compute);

std::future की विधियाँ

सामान्य संक्रियाएँ:

  • get() — कार्य पूरा होने तक रुकता है और परिणाम लौटाता है (केवल एक बार)
  • wait() — रुकता है, लेकिन परिणाम नहीं लौटाता
  • wait_for(d) / wait_until(t) — समय-सीमित प्रतीक्षा
  • valid() — क्या यह future तैयार किया गया है?

अपवाद का प्रसार

यदि असिंक्रोनस कार्य अपवाद उत्पन्न करता है, तो अपवाद future में संग्रहीत हो जाता है और get() पर फिर से उत्पन्न किया जाता है।

auto f = std::async([] { throw std::runtime_error("oops"); });
try {
    f.get();
} catch (const std::exception& e) {
    std::cout << e.what();
}

एकाधिक मान लौटाना

परिणाम को टपल, संरचना या कंटेनर में लपेटें।

auto f = std::async([] {
    return std::make_pair(42, std::string("hello"));
});
auto [n, s] = f.get();

समानांतर रूप से कई कार्य

कई असिंक्रोनस कार्य शुरू करें और उन सभी के पूरा होने की प्रतीक्षा करें।

auto a = std::async(work_a);
auto b = std::async(work_b);
auto c = std::async(work_c);

std::cout << a.get() + b.get() + c.get();

std::promise: मैनुअल Future

ऐसे उत्पादक-उपभोक्ता पैटर्न में, जहाँ उपभोक्ता को future चाहिए लेकिन उत्पादक किसी दूसरे थ्रेड में है, std::promise का उपयोग करें।

std::promise<int> p;
std::future<int> f = p.get_future();

std::thread t([&p] { p.set_value(42); });
std::cout << f.get();
t.join();

std::packaged_task

यह किसी कॉल करने योग्य ऑब्जेक्ट को future के साथ जोड़ता है। जब कार्य कहीं और, जैसे थ्रेड पूल में, शुरू किया जाता है तब यह उपयोगी होता है।

shared_future

std::future को केवल एक बार पढ़ा जा सकता है। std::shared_future से कई पाठक संभव होते हैं — यह परिणाम प्रसारित करने के लिए उपयोगी है।

विध्वंसक का व्यवहार

डिफ़ॉल्ट नीति के साथ std::async द्वारा लौटाए गए future का विध्वंसक कार्य पूरा होने तक रुक सकता है। लंबे समय तक चलने वाले कार्यों में इसका ध्यान रखें।

std::async से आगे

उत्पादन-स्तर के असिंक्रोनस कार्यों के लिए Boost.Asio, Folly या C++20/23 के एक्ज़ीक्यूटर और कोरूटीन जैसी लाइब्रेरी पर विचार करें। std::async एक शुरुआती विकल्प है।

त्वरित जाँच

std::future पर .get() कॉल करने से क्या होता है?

पुनरावृत्ति

std::async किसी फ़ंक्शन को असिंक्रोनस रूप से चलाता है; लौटाया गया std::future परिणाम उपलब्ध कराता है और अपवादों का प्रसार करता है। निष्पादन नियंत्रित करने के लिए लॉन्च नीतियों का उपयोग करें। जटिल पैटर्न के लिए std::promise और std::packaged_task का उपयोग करें।

शुरुआत निःशुल्क

एआई शिक्षक के साथ C++ सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
51
पाठ
203

अक्सर पूछे जाने वाले प्रश्न

क्या “std::async और std::future की मूल बातें” पाठ निःशुल्क है?

हाँ — C++ Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “std::async और std::future की मूल बातें” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। C++ Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“std::async और std::future की मूल बातें” में मैं क्या सीखूँगा?

कार्य asynchronous रूप से चलाएँ और std::future के माध्यम से उनके परिणाम प्राप्त करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C++ Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या C++ Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C++ Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।

“std::async और std::future की मूल बातें” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस C++ Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर C++ Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. std::thread: joining और detaching
  2. std::mutex, lock_guard और unique_lock
  3. Condition variables और worker patterns
  4. std::async और std::future की मूल बातें
← C++ Academy पर वापस जाएँ