【发布时间】:2020-09-13 04:41:37
【问题描述】:
嗨,我是学习 C++ 多线程的新手 这个问题可能看起来很愚蠢,但只是好奇为什么会这样 如果有人指出引擎盖下发生了什么,那就太棒了
所以,
class background_task
{
public:
void operator()() const
{
for (int i = 0; i < 1000; ++i)
std::cout << "Hello world " << i << std::endl;
}
};
void Func()
{
for(int i=0; i<1000;++i)
std::cout << "Hello world " <<i<< std::endl;
};
void main()
{
background_task bt;
std::thread t(bt);
//t.detach();
}
它给了我运行时错误,说“abort() 已被调用” 并且使用 detach() 它工作得很好。 无论哪种情况,新线程都会一直执行循环直到结束(1000次) 我只是猜测错误的发生是因为运行时线程退出时有额外的线程在运行。 但即使我调用了 detach(),仍然有额外的线程,并且在这种情况下不会输出任何错误。
我猜,在 std::thread 的析构函数中,它检查为 assert(!joinable()) 还是我遗漏了什么?
【问题讨论】:
-
您是否正在使用一个好的 C++ 来学习如何处理像 C++ 多线程这样的复杂主题?如果你这样做了,那本书对
thread::join函数有什么看法?多线程编程与编写常规的单线程程序不同,这可能是您对结果感到惊讶的原因。
标签: c++ multithreading detach