xml*_*lmx 2 c++ multithreading future promise c++11
#include <future>
using namespace std;
void t1(promise<int> p)
{
this_thread::sleep_for(chrono::seconds(5));
p.set_value(0);
}
void t2(shared_ptr<promise<int>> p)
{
this_thread::sleep_for(chrono::seconds(5));
p->set_value(0);
}
future<int> f1()
{
promise<int> p;
async(t1, move(p));
return p.get_future();
}
future<int> f2()
{
auto p = make_shared<promise<int>>();
async(t2, p);
return p->get_future();
}
int main()
{
f1().get();
f2().get();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:
如何通过或通过?将std::promise对象传递给线程?std::movestd::shared_ptr
哪个更好?
首先得到未来,然后将承诺转移到线程中.
std::future<int> f() {
std::promise<int> p;
auto r=p.get_future();
std::async(t1, move(p));
return r;
}
Run Code Online (Sandbox Code Playgroud)
当然这是愚蠢的,因为你使用async块直到任务完成.但它是正确使用的promise.
分享承诺是不好的,它应该具有唯一的所有权,因为只有一个应该设置它的价值.而那些人应该拥有它的一生.
离开之后,你再也无法从中获得未来.
| 归档时间: |
|
| 查看次数: |
2831 次 |
| 最近记录: |