在静态函数中使静态本地对象线程安全的有效方法是什么?

我正在分析故障转储,发现本地静态对象初始化中存在竞争条件。我正在使用MSVC ++ 12.0,它没有线程安全的静态初始化。

这是程序的最低版本。

#include <iostream>
#include <thread>
#include <chrono>
#include <Windows.h>

class internalClass
{
public:
    internalClass(int parm) : value(parm) {}
    int value;
};

class externalClass
{
public:
    externalClass(int parm)
    {
        Sleep(1000*10);
        dp = new internalClass(parm);

    }
    void print()
    {
        std::cout << dp->value << "\n";
    }
    ~externalClass()
    {
        delete dp;
    }
    internalClass *dp;
};

static void foo()
{
    static externalClass obj(50);
    obj.print();
}

int main()
{
    std::thread t1(foo);
    Sleep(1000);
    std::thread t2(foo);
    t1.join();
    t2.join();
}

在主程序中,externalClass实际上用于资源同步。

great_stonezsl321 回答:在静态函数中使静态本地对象线程安全的有效方法是什么?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2754713.html

大家都在问