Я анализирую дамп cra sh и обнаружил, что у меня есть состояние гонки при локальной инициализации объекта stati c. Я использую MSVC ++ 12.0, который не имеет потоковой инициализации stati c.
Вот минимальная версия программы.
#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 фактически используется для синхронизации ресурсов.