vs2013下一个神奇的C++卡死问题

七合一的那只小金刚 发布于 2021/08/30 12:37
阅读 747
收藏 0

鸿蒙原生应用开发者激励计划发布!最高获百万现金!点击立即参与

先贴源码:

#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编译的无问题。

各位大师有何看法。。。

加载中
0
明月惊鹊
明月惊鹊

你看看 内存屏障(Memory Barriers)  相关的内容,可以解决这个问题。

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部