如何从unique_ptr到对象异步执行方法?

时间:2014-04-18 23:50:01

标签: c++ multithreading c++11 unique-ptr stdasync

我创建了一个指向对象的唯一指针:

std::unique_ptr<MyClass> myObj(new MyClass(arg1, arg2));

那里有一个方法,我需要在并行线程中执行。我不想等待它完成。它将运行for循环并等待某些事情并在其自己的时间内完成。

我试着这样称呼它:

std::async(std::launch::async, &MyClass::MyMethod, myObj.get(), someArg, anotherArg);

也是这样的:

std::async(std::launch::async, [&] {myObj->MyMethod(someArg, anotherArg); });

两次调用都成功并执行方法中的任何内容。但我没有得到任何并行性。执行在我调用此处的任何地方等待,并且在方法完成之前不会继续执行。在自己的线程中运行此方法而不是等待它的好方法是什么?我应该使用一些特殊的编译器标志来实现吗?我在Ubuntu上使用GCC 4.8.1。

1 个答案:

答案 0 :(得分:2)

问题在于std::future返回的std::async。由于任务未延期,std::future对象正在被立即销毁。这会导致析构函数阻塞,直到线程执行完成。你需要抓住std::future对象。