【发布时间】:2015-12-09 18:31:10
【问题描述】:
我正在尝试使用std::future 和std::async 实现一个简单的依赖关系求解器。目前我不明白是否有可能做到这一点。问题是,我们可以通过(尚不可用)future 到async 通话吗?如果没有,实际上可以做些什么来让带有一些尚未准备好输入的函数链相互调用?也许,可以覆盖传递给延迟异步的值?
可能我的描述难以理解,所以举个例子:
#include <iostream>
#include <future>
#include <map>
using namespace std;
int adder(future<int> a, future<int> b) {
return a.get() + b.get();
}
int main() {
map<char, future<int>> scheme;
scheme['c'] = future<int>(async(launch::deferred, [] { return 1;}));
scheme['a'] = future<int>(async(launch::deferred, adder, move(scheme['b']), move(scheme['c'])));
scheme['b'] = future<int>(async(launch::deferred, [] { return 3;}));
cout << scheme['a'].get() << endl;
}
我们应该有这样的方案:
c
\
a ----- result
/
b
4 的结果。
此代码失败:move 只取一个空的future 并将其传递给adder。如果我们用'a' 和'b' 交换行,它会正常工作,但这样我们应该已经知道依赖关系了。
【问题讨论】:
标签: c++ c++11 asynchronous future