C++ future::wait()是否与async()执行线程的完成同步?

C++ future::wait()是否与async()执行线程的完成同步?,c++,c++11,synchronization,atomic,memory-model,C++,C++11,Synchronization,Atomic,Memory Model,据说它与相应执行线程的完成同步。我想知道这是否同样适用于async()和future::wait()。例如: std::atomic_int v(0); 异步( std::launch::async, [&v]{v.fetch_add(1,std::memory_order_released);} ).wait(); 断言(v.load(std::memory\u order\u released)==1); assert()永远不会失败。直接来自N3337(标准草案),我强调: 同步:无论提

据说它与相应执行线程的完成同步。我想知道这是否同样适用于
async()
future::wait()
。例如:

std::atomic_int v(0);
异步(
std::launch::async,
[&v]{v.fetch_add(1,std::memory_order_released);}
).wait();
断言(v.load(std::memory\u order\u released)==1);
assert()
永远不会失败。

直接来自N3337(标准草案),我强调:

同步:无论提供的策略参数如何

  • 异步的调用与([intro.multi-thread])f的调用同步。[注:本声明适用于以下情况: 相应的未来对象被移动到另一个线程。-结束注释]; 及

  • 函数f的完成在共享状态准备就绪之前进行排序。[注:f可能 根本不会被调用,所以它的完成可能永远不会发生。-结束 注]

如果实现选择
launch::async
策略

  • 对共享此异步调用创建的共享状态的异步返回对象上的等待函数的调用应阻止,直到 关联的线程已完成,就像已连接一样 ([thread.thread.member])

  • 关联的线程完成与([intro.multi-thread])从第一个 成功检测共享状态的就绪状态,或使用 从释放共享状态的最后一个函数返回, 以先发生的为准


因此,对于您的问题,这意味着是的,断言将永远不会失败。

感谢您对标准的引用。基于常识,我认为这是真的。现在,我敢肯定:)