依据C++17标准,两次未存储std::future的std::async调用程序输出为何?是否必输出z?
程序输出分析(基于C++17标准)
首先明确代码里的关键规则:当调用std::async并指定std::launch::async策略时,若不保存返回的std::future对象,这个临时的std::future在语句结束时析构,会强制阻塞当前线程,直到对应的异步任务完全执行完毕。
具体执行流程:
- 初始化字符串
x为"x"。 - 第一个
std::async语句:启动异步线程执行x = "y",语句结束时临时std::future析构,主线程阻塞等待该任务完成,此时x的值变为"y"。 - 第二个
std::async语句:启动异步线程执行x = "z",语句结束时临时std::future析构,主线程再次阻塞等待该任务完成,此时x的值变为"z"。 - 最后执行
std::cout << x,输出z。
结论:该程序保证输出z。
内容的提问来源于stack exchange,提问作者Yasuo
相关产品推荐
相关产品推荐

