C++11 promise、future和async

  C++11提供了操作线程的几个高级接口,分别为函数async(), promise和future。

  async用于异步启动一个线程,并返回一个future对象。注意,async不一定会马上启动线程,所以如果想要立刻启动线程,可以通过future对象调用get()或直接在async中加入std::launch::async参数来激活异步线程。这两者的区别是,在没有加入发射参数的情况下,如果没有调用get(),那么可能在程序结束时也不会启动线程。而在加入发射参数的情况下,返回的future对象在生命周期结束前,一定会等待线程执行结束,因此这种情况下如果没有保存返回的future,那么程序会在这里同步等待线程执行结束。launch下还有一个deferred参数,加入该参数保证线程在future对象调用get()时启动,可以用于缓式求值。

  可以调用future对象的wait_for(chrono::second(0))来判断线程的运行情况,比如用于轮询该线程是否已执行完毕。注意,该函数的返回值有三种情况:未启动,逾期,已完成。

  promise用于存储一个值,并通过与之关联的future来取得promise中的值。promise调用get_future()来返回与之配对的future。注意,promise不支持copy语义,需要通过引用或移动的方式来传递promise。

  async()的三种典型用法:

  1)async(std::launch::async, ...),这种调用会立即启动一个线程,并且该线程保证在返回的future被销毁时完成工作,或者对返回的future调用get()或wait()。

  2)async(std::launch::deferred, ...),这种调用会在返回的future调用wait()或get()时启动线程,可相当于推迟的同步调用。如果不调用get()或wait(),则线程不会启动。

  3)async(...),系统自动选择发射策略,如果可以立即启动,那么就启动线程,否则推迟启动线程。

原文链接: https://www.cnblogs.com/yxsrt/p/12995275.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    C++11 promise、future和async

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/198117

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月12日 下午7:46
下一篇 2023年2月12日 下午7:46

相关推荐