jeudi 21 juillet 2016

std::map insert thread safe in c++11?

I have very simple code in which multiple threads are trying to insert data in std::map and as per my understanding this should led to program crash because this is data race

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;
}

However i ran it multiple time and there is no application crash and if run same code with pthread and c++03 application is crashing so I am wondering is there some change in c++11 that make map insert thread safe ?

Aucun commentaire:

Enregistrer un commentaire