This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
Re: Subtle MT problem with __gnu_cxx::hash_map
- From: Matt Austern <austern at apple dot com>
- To: Paul Dubuc <pdubuc at cas dot org>
- Cc: libstdc++ at gcc dot gnu dot org, gcc-bugs at gcc dot gnu dot org, gcc-help at gcc dot gnu dot org
- Date: Fri, 19 Nov 2004 12:30:55 -0800
- Subject: Re: Subtle MT problem with __gnu_cxx::hash_map
- References: <419E55D6.6030803@cas.org>
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