Re: Synchronization and volatile
On Jan 2, 7:03 am, George2 <george4acade...@yahoo.com> wrote:
Through myself study and previous discussion here, I share the
conclusion here that,
if some object is synchronized (mutex, critical section,
etc.), there is no need to add volatile keyword.
Correct. And if the object isn't synchronized, you can't access
it from multiple threads if any thread may modify it, even if it
is declared volatile. The moral is that without
synchronization, volatile isn't enough, and with
synchronization, volatile isn't necessary.
Arguably, this is only because compiler writers ignore the
intent of volatile, and don't implement it, but whatever the
reason, that's the way it is.
Here is the reference,
(refer to section volatile, Critical Sections, and Race Conditions)
if my understanding is wrong or you have any other options,
please feel free to add here.
That's one of Andrei's most interesting articles. It was longly
discussed shortly after it appeared; in the discussion, Andrei
himself admitted that he had misunderstood volatile somewhat,
and the guarantees it gives (and doesn't give). The basic idea
in the article is sound (and in some ways brilliant), because it
doesn't count on any semantics for volatile, but only on the way
volatile works within the type system. I wouldn't use the
article as a basis for understanding volatile semantics,
James Kanze (GABI Software) email:email@example.com
Conseils en informatique orient=E9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S=E9mard, 78210 St.-Cyr-l'=C9cole, France, +33 (0)1 30 23 00 34