Re: What does volatile guarantee?
Lew quoted or indirectly quoted someone who said :
Actually, it does. The particular argument is an extension of the observation
that += and ++ both represent a read followed by a write, with an increment or
addition in there somewhere. Those are inherently separate operations.
Roedy Green wrote:
I have forgotten what the machine was, but I once used a machine that
I believe it's called "the x86 family of processors".
<http://en.wikipedia.org/wiki/X86_assembly_language#Instruction_types>
Contains special support for atomic instructions (XCHG, CMPXCHG(8B),
XADD, and integer instructions which [sic] combine with the LOCK prefix)
Roedy Green wrote:
had an atomic ++ to memory machine instruction. You used it for
implementing locks rather that Test and Set. It is a plausible
question to ask if ++ is atomic.
Of course.
The post I answered that Andreas Leitgeb wrote:
So, what to say to those whining^H^H^H^H^H^H^Hsuggesting
making just "++" atomic?
wasn't about how to answer a question whether ++ is atomic, but a whine that
it isn't.
To a simple question about whether ++ in Java is atomic, a simple answer is,
"No, but you can use 'AtomicInteger##getAndIncrement()', et al., or
'synchronized'."
I would not be astounded to learn that the 'AtomicInteger' method is
implemented in terms of an atomic instruction where available (e.g., on x86
processors).
<http://www.ibm.com/developerworks/java/library/j-jtp11234/>
... the JVM improvements in JDK 5.0, ... exposed (to the class
libraries, but not to user classes) an interface to access
hardware-level synchronization primitives. The atomic variable
classes, and other classes in java.util.concurrent, in turn[,]
expose these features to user classes.
--
Lew