我有多个线程试图插入的std ::地图数据非常简单的代码和按我的理解这应该导致,因为这是数据种族程序崩溃std :: map在C++ 11中插入线程安全吗?
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;
}
但是我跑了多个时间并没有应用程序崩溃,如果与pthread和c + + 03运行相同的代码应用程序崩溃,所以我想知道是否有一些更改,使地图插入线程安全的c + + 11?
如果你的代码不是*可证明*线程安全的,那么你不应该认为它是。你不应该认为任何与线程有关的事情都可以,因为程序没有崩溃。 –
是的,我明白了,但问题是我们在生产环境中使用的类似代码崩溃,代码崩溃了,因为地图内部树正在重新平衡,所以只想知道地图插入线程安全性的C++ 11中是否有任何更改,因为那里我们用phreads来使用C++ 03 – Kapil