在运行c++多线程的代码时,突然报了如下错误:
对于这一错误,网上也有很详细的故障原因,详情可以参考:C++ abort() has been called错误
在我的代码中,经排查,发现是C++ thread的错误。下面通过一个例子来说明这一错误。
#include<iostream>
#include<thread>
#include <mutex>
using namespace std;
mutex mtx;
void func() {
cout << "hello world" << endl;
}
int main() {
thread t1(func);
//t1.join();
return 0;
}
上述代码通过thread调用func函数并输出hello world,运行结果如下
可见,程序能够正常输出,说明代码语法通过了编译,因此只可能是其他原因,参考上述博文进行排查,最后发现,需要在thread创建完后,增加join()语句,即:
#include<iostream>
#include<thread>
#include <mutex>
using namespace std;
mutex mtx;
void func() {
cout << "hello world" << endl;
}
int main() {
thread t1(func);
t1.join();
return 0;
}
此时程序输出正常,并且没有上述报错。