У меня есть очень простой код, в котором несколько потоков пытаются вставить данные в станде :: карте и согласно моему пониманию это должно привело к ее аварийному завершению, потому что это гонки данныхstd :: map insert thread safe in 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 для обеспечения безопасности вставки вставки карты, потому что там мы используем C++ 03 с phreads – Kapil