对std::promise, std::future, std::packaged_task, std::async的一点理解
2018-06-02 17:57 晨~光 阅读(271) 评论(2) 收藏 举报std::promise是用来给数据生产者封装数据用的;而std::future是配合std::promise供数据消费者线程获取数据用的。生产者封装数据后传递给其它异步线程的数据消费者,消费者要获取到生产者的数据,就需要使用std::future::get()函数来进行。get()函数会阻塞消费者线程直至生产者线程把数据生产完成。
std::packaged_task:用来包装一个可以调用的目标,如function, lambda expression, bind expression, or another function object。以便异步调用。
std::async是比std::thread更高层次的异步操作,用户不需要关心线程内部的细节,需要提供线程函数即可,很方便的获取到线程函数的返回值。还可以指定创建线程的策略。async,即在创建std::async函数的时候创建异步线程。deferred,在执行到furture的get或wait函数的时候创建异步线程。
浙公网安备 33010602011771号