鸿蒙原生应用开发者激励计划发布!最高获百万现金!点击立即参与
先贴源码:
#include <iostream>
#include <string>
#include <vector>
#include <thread>
class MyClass
{
private:
std::vector<std::thread> arrthreads;
bool bexit;
public:
MyClass()
{
bexit = false;
};
~MyClass()
{
bexit = true;
for (auto &x : arrthreads)
{
x.join(); //vs编译的这里会卡死,gcc编译的正常执行
}
};
void init()
{
for (int i = 0; i < 4; i++)
{
arrthreads.emplace_back([this](){
printf("trhead start...\n");
while (true)
{
if (bexit)
break;
}
printf("trhead exit...\n");
});
}
};
};
MyClass testthread; //全局变量
int main()
{
printf("main2\n");
testthread.init();
return 0; //触发MyClass的析构方法
}
MyClass析构函数中让工作线程退出,毫无问题,但是vs编译的,join会卡死阻塞或者崩溃跑飞,gcc编译的无问题。
各位大师有何看法。。。
你看看 内存屏障(Memory Barriers) 相关的内容,可以解决这个问题。