特殊情况下的等待

 当倾向于在无异常的情况下使用join()时, 需要在异常处理过程中调用join(), 从而避免生命周期的问题。  

struct func; // 定义在清单2.1中
void f()
{
    int some_local_state=0;
    func my_func(some_local_state);
    std::thread t(my_func);
    try
    {
        do_something_in_current_thread();
    } 
    catch(...)
    {
        t.join(); // 1
        throw;
    } 
    t.join(); // 2
}

如果不想等待线程结束, 可以分离(detaching)线程, 从而避免异常安全(exception-safety)问题。 不过, 这就打破了线程与 std::thread 对象的联系, 即使线程仍然在后台运行着, 分离操作也能确保 std::terminate() std::thread 对象销毁才被调用。 

posted @ 2024-03-24 20:44  小熊酱  阅读(21)  评论(0)    收藏  举报