微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当其中一个线程失败时,如何在多线程程序中确定退出代码?

如何解决当其中一个线程失败时,如何在多线程程序中确定退出代码?

struct func
{
    int& i;
    func(int& i_):i(i_){}
    void operator()()
    {
        for (unsigned j = 0; j < 1000000; ++j)
        {
            ++i;
        }
    }
};

int main()
{
    int some_local_state = 0;
    func my_func(some_local_state);
    std::thread my_thread(my_func);
    my_thread.detach();
    return 0;
}

输出

(进程 1528)退出代码为 -1073741819

什么决定了退出代码detaching 对于 Windows 进程意味着什么?

解决方法

在此示例中,错误代码 -1073741819 (0xc0020001) 不是由您的可执行文件产生的,而是由决定终止您的进程的操作系统产生的。

您还(在评论中)提出了有关分离线程的问题。 这意味着您不会在此线程上使用 join(),因此您启动它,但您不想知道它何时完成工作。


编辑

在我的第一个答案中,我误读了示例,并认为突然终止是由于通过 未初始化的 i 引用。 这是错误的,因为 i 实际上是为了引用 some_local_state 而初始化的。 但是,当 main() 返回时,some_local_state 不再存在,但仍被线程引用。 没有说明在 main() 返回的确切时刻分离的线程会发生什么。 该线程是否在 main() 的局部变量消失之前立即终止?我真的很怀疑这个... 这大概解释了进程异常终止的原因。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。