Consider the following code:
#include <iostream>#include<string>#include<thread>#include<mutex>#include<condition_variable>Std::mutex m;std::condition_variable cv;std::stringdata;BOOLReady =false;intresult =0; voiddo_work () {std::this_thread::sleep_for (Std::chrono::seconds (1)); Result=123; {Std::lock_guard<std::mutex>LK (m); Ready=true; } cv.notify_one ();} intMain () {Std::thread thread (do_work); Thread.detach (); Std::unique_lock<std::mutex>LK (m); Cv.wait (LK, []{returnReady ;}); Std::cout<<"result="<< result <<'\ n';}
C++11 introduces promise and future, and can use task-based thinking
#include <iostream>#include<cstdlib>#include<future>#include<chrono>voidDo_work (std::p romise<int>promise) {std::this_thread::sleep_for (Std::chrono::seconds (1)); Promise.set_value (123);}intMain () {std::p romise<int>promise; Std::future<int> Future =promise.get_future (); Std::thread thread (do_work, Std::move (Promise)); Thread.detach (); Future.wait (); Std::cout<<"result="<< future.Get() <<'\ n';}
See, is it a lot of code streamlining? Now continue streamlining, using the Std::async code as follows:
#include <iostream>#include<cstdlib>#include<future>#include<chrono>intMain () {std::future<int> Future =Std::async ([] () {std::this_thread::sleep_for (Std::chrono::seconds (1)); return 123; }); Future.wait (); Std::cout<<"result is"<< future.Get() <<'\ n';}
In addition, introduce a C + + online compiler https://wandbox.org/
C + + Async