代码之家  ›  专栏  ›  技术社区  ›  Grzegorz

std::未来与临时std::承诺

  •  2
  • Grzegorz  · 技术社区  · 7 年前

    我很难理解这个承诺是如何与未来合作的。 我有一个函数正在返回 std::future 如本例所示:

    std::future<int> calcSomeValue() {
    }
    

    我的问题是,这个未来可以通过异步生成线程来计算,也可以有一个结果已经准备好返回,所以我希望使用 std::promise 没有任何线索。但是…我不知道这是否安全,或者我还能做什么。 参见示例:

    std::future<int> calcSomeValue() {
        if (resultIsReady()) {
            std::promise<int> promise; // on the stack
            std::future<int>  rv = promise.get_future(); // is future part of the memory occupied by promise?
    
            promise.set_value(resultThatIsReady); // does it store the value in promise or in future?
            return rv; // <--- What will happen when promise is lost?
        }
        else {
            return std::async(....)
        }
    }
    

    请参阅上面代码中的注释。 当 .get() 被称为承诺已经实现的地方?如果是的话,我会有一个大的嘟嘟嘟嘟在这里。

    有人能告诉我怎么回去吗 STD:未来 在这种情况下?

    1 回复  |  直到 7 年前
        1
  •  3
  •   Stephan Lechner    7 年前

    一个 promise -对象与共享状态相关联(请注意“共享”)。打电话时 promise::get_future ,您将收到 future -与相应的Promise对象关联的共享状态相同的对象。只要一个相关的生产者(即承诺者)或消费者(即未来者)活着,这个州就至少会存在。因此,如果 承诺 的生存期在相应的 未来 -反对。

    不规范,但比如说, promise 如cpluplus.com所述:

    共享状态的生存期至少持续到最后一个对象 与之相关联的释放或销毁。因此 如果一开始得到它的承诺对象 也与未来相关。