sha*_*ane 6 c++ multithreading c++11
是否将a传递std::future给std::thread安全操作的独立实例?我知道在下面,std::futureshared_ptr中的状态与共享std::promise。这是一个例子。
int main()
{
    std::promise<void> p;
    std::thread( [f = p.get_future()]() {
        if ( f.wait_for( std::chrono::seconds( 2 ) ) == std::future_status::ready ) 
        {
            return;
        }
        std::terminate();
    } ).detach();
    // wait for some operation
    p.set_value();
}
上面的代码中有一个潜在的错误情况,即在主线程退出之后执行lambda。主线程退出后,共享状态是否仍保留?
[basic.start.term]/6如果在信号处理程序 (21.10) 中不允许使用标准库对象或函数,则在 (4.7) 完成具有静态存储持续时间的对象的销毁和执行注册之前不会
std::atexit发生函数(21.5),程序有未定义的行为。
根据[basic.start.main]/5,从返回main具有调用的效果std::exit,它会销毁具有静态存储持续时间的对象并执行std::atexit注册的函数。因此,我相信您的示例表现出未定义的行为。