On Jul 27, 6:51 am, "Alf P. Steinbach" <al...@start.no> wrote:
* Virchanza:
Volatile is intended to be used where a variable's value can
mysteriously change outside of the normal flow of code.
I'm still not sure whether "a separate thread" qualifies as being
mysterious enough. Some people are telling me I need volatile. Others
are telling me I don't need volatile. I don't know who to believe.
Is it even possible to get an answer to this question, or is it simply
"undefined"?
It was answered definitively here:
<url:http://www.google.com/search?q=alexandrescu+meyers+volatile>
Presumably, you mean that the Meyers & Alexandrescu paper on double-
checked locking:
http://www.aristeia.com/Papers/DDJ_Jul_Aug_2004_revised.pdf
provides a definitive answer.
And it does. The paper concludes that "volatile" is needed in order to
ensure thread-safety - and in fact is needed more than once:
"Our earlier analysis shows that pInstance needs to be declared
'volatile',
and in fact this point is made in the papers on DCLP. However,
Sherlock Holmes would certainly notice that, in order to ensure
correct instruction order, the Singleton object -itself- must be also
'volatile'. This is not noted in the original DCLP papers, and that?s
an important oversight." [pg 7-8].
You might read on... ;-)