如何通过使用c ++ 11多线程获得价值

时间:2018-02-24 07:11:03

标签: multithreading c++11

#include <iostream>
#include <thread>

using namespace std;

int foo(int n){
    int doubleN = n * 2;
    return doubleN;
}


int main(){
    int n = 2;
    thread t(foo,n);
    t.join();
    return 0;
}

就上述代码而言,我可以在主函数中获得doubleN的值吗?

2 个答案:

答案 0 :(得分:4)

如果要获取线程执行的任务结果,可以使用async函数:

int foo(int n){
    int doubleN = n * 2;
    return doubleN;
}


int main(){
    int n = 2;
    future<int> result = async(std::launch::async, foo,n);
    cout << result.get() << endl; //4
    return 0;
}

答案 1 :(得分:1)

您可以使用std::promisestd::future,cppreference std::promise文档有一个示例来演示如何使用promise<int>在线程(link)之间传输结果。

#include <iostream>
#include <thread>
#include <future>

using namespace std;

int foo(int n, std::promise<int> doubleN_promise){
    int doubleN = n * 2;
    doubleN_promise.set_value(doubleN);
    return doubleN;
}

int main(){
    int n = 2;
    std::promise<int> doubleN_promise;
    std::future<int> doubleN_future = doubleN_promise.get_future();
    thread t(foo, n, std::move(doubleN_promise));
    doubleN_future.wait();  // wait for doubleN
    std::cout << "doubleN=" << doubleN_future.get() << '\n';
    t.join();
    return 0;
}