假设有一个应用程序应用程序用于处理大量的网络连接,通常我们会为每一个连接创建单独的处理线程。当线程数量较少时,这样是可行的,但是随着连接数量的增加,大量的线程需要消耗大量的系统资源。这样,使用较少的线程,每个线程处理多个连接更为合适。
std::promise<T>提供了一个设置值的机制(类型T),通过与之关联的期望对象可以获取到被设置的值。std::promise/std::future一起配合,等待线程可以阻塞在期望上,实现承诺的线程可以使用promise对象来设置值,使得期望被满足。
如下是一个使用promise的简单示例,主线程创建一个promise,将于promise关联的期望交给新的线程th1。新线程等待从期望获取数据,主线程通过promise向期望设置值。
// promise example
#include <iostream> // std::cout
#include <functional> // std::ref
#include <thread> // std::thread
#include <future> // std::promise, std::future
void print_int (std::future<int>& fut) {
int x = fut.get();
std::cout << "value: " << x << '\n';
}
int main ()
{
std::promise<int> prom; // 创建承诺
std::future<int> fut = pro