2. 利用futures等待一次性事件
C++标准库利用future来模塑一次性事件。如果某个线程需要等待某个事件发生,它可以获得一个future来代表那个事件。C++标准库中提供了两种future,这两个类模版均声明在<future>头文件中。
C++标准库提供了std::future<>和std::shared_future<>。
std::future<>类似unique_ptr, 拥有独占所有权,也即一个std::future可以拥有一个事件的所有权且只能由std::future拥有。
std::shared_future<>类似与shared_ptr, 意味着共享所有权,也即一个事件可以由多个shared_future实例拥有。
future仅仅提供了一种在线程间通信的方式,future对象本身仍然需要进行同步访问。如果多个线程需要去访问某个future对象,他们必须利用mutex或者其他同步机制对future对象进行互斥访问。
2.1 从后台线程返回值
在 C++并发编程--第二章--线程管理中,我们知道std::thread不能直接获得线程的返回值,而我们利用future和std::async函数模版可以达到该效果。
利用std::async可以开始一