future promise shared_future簡單使用

c++高階碼農發表於2020-12-08

#include

#include

#include

/furture 和promi******************/

int display(const int& value) {
return 10 + value;

}

//不能傳引用,是簡單的值拷貝

int display1(std::shared_future f) {

//地方會一直等待,阻塞狀態,由其它執行緒傳入值

int value = f.get();



return value;

}

//不能傳引用,是簡單的值拷貝

int display2(std::shared_future f) {

//地方會一直等待,阻塞狀態,由其它執行緒傳入值

int value = f.get();



return value;

}

int main()

{
std::cout << “11” << std::endl;

int value = 10;

//取決執行環境

std::future<int>fu = std::async(std::launch::async | std::launch::deferred, display, std::ref(value));



int value1 = fu.get();

std::cout << value1 << std::endl;




//定義一個promise的變數

std::promise<int>promise;

//傳遞下一個執行緒

promise.set_value(10);

//std::future<int> fu11 = promise.get_future();



//共享furture,所有執行緒都可以用

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

std::shared_future<int>shared_futrue = fu11.share();

//std::launch::async create thread

//std::launch::deferred 

std::future<int>fu1 = std::async(std::launch::async | std::launch::deferred, display1, shared_futrue);



std::future<int>fu2 = std::async(std::launch::async | std::launch::deferred, display2, shared_futrue);



int value11 = fu1.get();



int value22 = fu2.get();



//std::thread t(display1, std::ref(fu11));

}

相關文章