C++ Container thread safety guidelines at http://en.cppreference.com/w/cpp/container#Thread_safety
say
So my question is, let us say I have an
unordered_map<MyKeyClass, MyValueClass> results
and I have several threads running concurrently and populating this map upon completion with <unique_key, some_value>
. It is guaranteed that each thread returns a unique MyKeyClass. Does that now mean that I can safely concurrently insert the values into results ?
If yes, then that answers my question.
If no, then how about I insert <key, empty_value> before spawning the threads and then there will be no concurrent insertions, just modifications of the values, which if I understand correctly should be ok ?
Does that now mean that I can safely concurrently insert the values into results ?
No. A std::unordered_map
is not inherently thread safe. You cannot modify it from different threads without adding synchronization.
Modifying elements in a container can be done without modifying the container itself.
If no, then how about I insert <key, empty_value> before spawning the threads and then there will be no concurrent insertions, just modifications of the values, which if I understand correctly should be ok ?
Yes. The sentence you quote is about modifying elements in the container. It is not about inserting elements into a container. You cannot concurrently insert but modify elements.