Subtle MT problem with __gnu_cxx::hash_map

Matt Austern austern@apple.com
Fri Nov 19 20:31:00 GMT 2004


On Nov 19, 2004, at 12:21 PM, Paul Dubuc wrote:

> There's a subtle thread safety problem with hash_map that was found in 
> our testing recently.  It's understood that operator[] is a non-const 
> method since it can insert an element into a container if one is not 
> found with the given index.
>
> In our case we were using operator[] to access a hash_map that had 
> been fully populated.  Each index we were using did have an entry in 
> the hash_map.  So we were accessing elements in the map with 
> operator[] using multiple threads thinking that this would be a thread 
> safe, const operation.  This is implied by the statement "simultaneous 
> read accesses to to shared containers are safe" in the SGI STL user's 
> guide (http://www.sgi.com/tech/stl/thread_safety.html).

But operator[] isn't read access.  It's defined to be equivalent to a 
certain form of insert().

			--Matt



More information about the Libstdc++ mailing list