C++异步操作中的future/promise

std::future、std::promise是在C++11中出现的类,定义在中,在C++20以前,异步操作主要依靠它们以及其它一些类、函数等来完成。C++20中引入了coroutine,从语言层面而不仅是实现方法层面实现异步操作,但coroutine中也涉及到std::future等对象,因此需要先理解一下这些C++11就出现的类,下一篇再介绍C++20的coroutine。

std::future

std::future可以保存某一操作(函数)的结果,因而也可以用来在不同的线程间传递这一结果。std::future最通常的用法是在把慢速线程的结果放到一个future对象,在另一个线程中可wait and get这个“将来”可能得到的结果,这就是其名称的意义。要注意的是,future的状态是独享的,即一个操作(函数)的结果只能与一个future对象关联,并且只能get一次(效果等同于std::move(结果值))。

std:: packaged_task

std::packaged_task提供对某函数的封装,然后同步/异步运行该函数,函数结果(返回值或异常)保存在其内部的一个future对象中。在std::packaged_task的构造函数中提供需要封装的函数,形式可以是独立的函数、lamda函数、std::bind的函数,在std::packaged_task::operator ()

你可能感兴趣的:(C/C++,c++)