特殊情况下的等待

 当倾向于在无异常的情况下使用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 @   小熊酱  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示