如何解决当其中一个线程失败时,如何在多线程程序中确定退出代码?
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;
}
输出是
什么决定了退出代码? detach
ing 对于 Windows 进程意味着什么?
解决方法
在此示例中,错误代码 -1073741819 (0xc0020001) 不是由您的可执行文件产生的,而是由决定终止您的进程的操作系统产生的。
您还(在评论中)提出了有关分离线程的问题。
这意味着您不会在此线程上使用 join()
,因此您启动它,但您不想知道它何时完成工作。
编辑
在我的第一个答案中,我误读了示例,并认为突然终止是由于通过
未初始化的 i
引用。
这是错误的,因为 i
实际上是为了引用 some_local_state
而初始化的。
但是,当 main()
返回时,some_local_state
不再存在,但仍被线程引用。
没有说明在 main()
返回的确切时刻分离的线程会发生什么。
该线程是否在 main()
的局部变量消失之前立即终止?我真的很怀疑这个...
这大概解释了进程异常终止的原因。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。