On Mon, Sep 24, 2012 at 10:03 PM, Martin Sebor <mse...@gmail.com> wrote:
> FWIW, there are race conditions in stdcxx. Some of them are by
> design and benign on the systems the library runs on (although
> I acknowledge that some others may be bugs). One such benign
> date race is:
> time T1 T2
> 0 x = N
> 1 x = N read x
> where x is a scalar that can be accessed atomically by the CPU
> and the compiler.
> I think some of the lazy facet initialization falls under this
> class. It would be nice to fix them but only if it doesn't slow
> things down. The others need to be fixed in any case.
The race conditions I am talking about are not benign.
I've uploaded a full thread analyzer output for 22.locale.numpunct.mt
showing dataraces here:
The name of the analyzer results directory is 22.locale.numpunct.mt.2.er
You will need the SunPro Linux 12.3 Thread Analyzer installed, which
comes with SunPro anyway. The analyzer itself is
There's a screenshot from the same Analyzer output here:
taken just now on my laptop. The report itself is from a couple of
days ago, and it's from a run with only the _numpunct.h patch applied.
No patches to either facet.cpp, punct.cpp or locale_body.cpp.
It shows the types of race conditions it's reporting: these are
read/write race conditions, not read/read. The thread analyzer's html
filter doesn't show the types of races reported as clearly as the
command-line analyzer which has a windowing GUI.
At any rate you can see the same exact type of race conditions being
reported by the Intel Inspector 2013 Thread Analyzer.