c ++ 11 - 实现Promise的示例程序无效

时间:2012-08-20 15:38:32

标签: c++ multithreading c++11 promise

我正在阅读Anthony Williams的C ++并发。 我试图运行一个实现std :: promise的示例程序,但它给出了一个错误。如果有人可以提供帮助,请告诉我。感谢。

代码: -

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

    using namespace std;

    int myValue(int i,promise<int> intPromise)
    {
        cout<<"In myValue()"<<endl;
        intPromise.set_value(i);
    }

    int main()
    {
        cout<<"In main()"<<endl;
        promise<int> myPromise;
        future<int> result=myPromise.get_future();
        thread myThread(myValue,10,move(myPromise));
        cout<<"Value : "<<result.get()<<endl;
    }

我在编译期间没有收到任何错误,但在运行此程序时出现以下错误。

在没有活动异常的情况下终止调用 中止(核心倾销)

虽然我得到了输出,但我也得到了这个错误。 我在Fedora 17上使用g ++ 4.7.0。请帮忙。

1 个答案:

答案 0 :(得分:3)

看起来主线程已在myThread之前完成。为了阻止主线程,你应该使用std::thread::join()

像这样:

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

using namespace std;

void myValue(int i, promise<int> intPromise)
{
        cout << "In myValue()" << endl;
        intPromise.set_value(i);
}

int main()
{
        promise<int> myPromise;
        future<int> result = myPromise.get_future();

        thread myThread(myValue, 10, move(myPromise));
        myThread.join();

        cout << "Value : " << result.get() << endl;
}