cd中的std :: promise和std :: future

Dec*_*her 5 c++ multithreading

std :: promise提供了一种设置值(类型为T)的方法,稍后可以通过关联的std :: future对象读取该值

  1. 这两者究竟如何相关联?

  2. 我的担忧是否合理,未来会与错误的承诺结合?

更新:来自行动中的并发的示例...(但代码无法编译)

#include <future>
void process_connections(connection_set& connections)
{
    while(!done(connections)){
        for(connection_iterator
        connection=connections.begin(),end=connections.end();
        connection!=end;
        ++connection)
        {
            if(connection->has_incoming_data()){
                data_packet data=connection->incoming();
                std::promise<payload_type>& p=
                connection->get_promise(data.id);
                p.set_value(data.payload);
            }
            if(connection->has_outgoing_data()){
                outgoing_packet data=
                connection->top_of_outgoing_queue();
                connection->send(data.payload);
                data.promise.set_value(true);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Sne*_*tel 5

  1. 可以将promise其future视为创建一次性数据通道。promise创建通道,并最终使用promise::set_value. future连接到通道,并future::wait在写入数据后读取并返回数据。

  2. 没有真正的问题,因为将 afuture与 a “配对”的唯一方法promise是 with promise::get_future。