Ich habe einen ganz einfachen Code, in dem mehrere Threads versuchen, Daten in std :: map einfügen und nach meinem Verständnis sollte dies führte Absturz zu programmieren, da diese Daten Rennen istStd :: Karte Thread sicher in C++ 11 einfügen?
std::map<long long,long long> k1map;
void Ktask()
{
for(int i=0;i<1000;i++)
{
long long random_variable = (std::rand())%1000;
std::cout << "Thread ID -> " << std::this_thread::get_id() << " with looping index " << i << std::endl;
k1map.insert(std::make_pair(random_variable, random_variable));
}
}
int main()
{
std::srand((int)std::time(0)); // use current time as seed for random generator
for (int i = 0; i < 1000; ++i)
{
std::thread t(Ktask);
std::cout << "Thread created " << t.get_id() << std::endl;
t.detach();
}
return 0;
}
i lief es jedoch mehrere Zeit und es gibt keinen Anwendungsabsturz und wenn derselbe Code mit pthread und C++ 03 ausgeführt wird, stürzt die Anwendung ab, also frage ich mich, ob es eine Änderung in C++ 11 gibt, die Map Insert Thread sicher macht?
Wenn Ihr Code nicht * nachweisbar * threadsicher ist, dann sollten Sie nicht davon ausgehen, dass dies der Fall ist. Sie sollten nicht davon ausgehen, dass etwas in Bezug auf Threading ist in Ordnung, nur weil das Programm nicht abstürzte. –
Ja, ich verstehe das, aber Problem ist ähnlich Code, den wir in der Produktionsumgebung verwenden, stürzt ab und der Code stürzt ab, wo Map interne Struktur neu ausbalanciert ist, also nur wissen wollen, gibt es irgendeine Änderung in C++ 11 für Map Insert Thread Sicherheit weil da benutzen wir C++ 03 mit phreads – Kapil