多线程编程
多线程编程中非常经典的模型是:生产者-消费者模型,即用户不断的提交很多任务,线程池分配不同的线程取消费这些任务,执行这些任务,并将任务执行结果返回到用户线程中。
用户提交任务、线程执行任务、用户获取任务返回结果这是异步的过程,所以针对这样的问题:线程池分配线程执行任务得到结果,这个结果类型是不定的,线程池只能使用一种通用的类型来接收结果,可以看我这篇文章,并将这个通用类型返回到用户线程,用户线程再从通用类型调用相应方法阻塞获取具体的执行结果,这些东西都可以通过C++11提供的std::future 和 std::packaged_task得以解决
std::future 和 std::packaged_task
std::future
和 std::packaged_task
都是 C++11 中引入的并发编程工具,用于在多线程环境中进行任务的管理和异步执行。
std::future:
std::future
是一种异步操作的结果的抽象表示,它提供了一种机制,允许一个线程等待另一个线程执行的结果。- 使用
std::async
、std::promise
、或者std::packaged_task
创建的异步任务可以返回一个std::future
对象,用于获取任务的执行结果