C++ 非同步多執行緒
阿新 • • 發佈:2020-09-10
用到 C++ future 庫,程式碼如下:
#include <iostream> #include <future> #include <unistd.h> using namespace std; double f(double a,double b){ double c = a+b; sleep(3); return c; } int main(){ double a=1.0,b=2.1; future<double> fu = async(f,a,b); cout<<"..."<<endl; cout<<"result:"<<fu.get()<<endl; return 0; }
編譯方式:
g++ -std=c++11 async.cpp -lpthread -o demo
future 無法實現多個執行緒等待同一個非同步執行緒結果,future 物件呼叫 get 後會轉移控制權,導致只有一個執行緒可以獲取非同步執行緒的返回值,要解決這個問題可以用 shared_future,程式碼如下:
#include <iostream> #include <future> #include <unistd.h> using namespace std; double f(double a,double b){ double c = a+b; sleep(3); return c; } int main(){ double a=1.0,b=2.1; shared_future<double> fu = async(f,a,b); shared_future<double> c1 = async(f,a,fu.get()); shared_future<double> c2 = async(f,a,fu.get()); cout<<"..."<<endl; cout<<"result:"<<c1.get()<<endl; cout<<"result:"<<c2.get()<<endl; cout<<"result:"<<fu.get()<<endl; return 0; }