学习 future 编程的前提是会了 std::condition_variable,否则对 std::future 系之 wait, set_*,get 的理解有障碍。
1. std::async
创建一个异步 future, 第一个参数设置策略,可以是
std::launch::async 异步策略:自动并行;
std::launch::deferred 延迟策略:只有使用 std::future 的 wait, get 方法才会触发执行;
2. std::packaged_task
包裹一个执行序,它是一个 moveable 类型的线程执行序,可以用 get_future 方法获得 future
3. std::promise
良好的 set/get 封装,实现 promise/future 并行化 (诺言/兑现并行? 不知道中文怎么表达了),良好的异常处理机制封装
上面这些话全是个人领悟了,具体的应该多写一些 c++ future 代码才可以理解异步,不然是不是看的不知所云呢?
简单又傻瓜的例子
Code: [show] | [select all]
例子 2:在 std::async 异步模式直接用原生的 std::condition_variable
Code: [show] | [select all]
代码: 全选
Waiting ... (ready: false)
ready=>true
Notified. (ready: true)
ready=>false
Waiting ... (ready: false)
ready=>true
Notified. (ready: true)
ready=>false
Waiting ... (ready: false)
ready=>true
Notified. (ready: true)
ready=>false
Waiting ... (ready: false)
ready=>true
Notified. (ready: true)
ready=>false
Waiting ... (ready: false)
ready=>true
Notified. (ready: true)
ready=>false
Waiting ... (ready: false)
ready=>true
Notified. (ready: true)
ready=>false
Waiting ... (ready: false)
ready=>true
Notified. (ready: true)
ready=>false
Waiting ... (ready: false)
ready=>true
Notified. (ready: true)
ready=>false
Waiting ... (ready: false)
ready=>true
Notified. (ready: true)
ready=>false
Waiting ... (ready: false)
ready=>true
Notified. (ready: true)
ready=>false
ready=>true
ready=>true
FreeBSD 针对 LLVM 做了很多的移植和底层优化,因而编译 c++ 快速且代码稳定,clang 是支持 c++ 最好的编译器