Re: Volatile keyword
On 12.12.2011 20:15, Roedy Green wrote:
On Mon, 12 Dec 2011 10:00:09 -0800, markspace<-@.> wrote, quoted or
indirectly quoted someone who said :
I don't like the word "lock" here because it implies something that
probably isn't happening. I think that volatile, even for long and
double, is specified to be much lighter weight than a lock.
Right, there is no lock, just a memory barrier.
In a 64-bit java, there is nothing to do. 64-bit reads are atomic
because the hardware is atomic.
I would be unsure whether that can be generalized. I can imagine a 64
bit system which externally uses 32 bit - even though that this would
not be very likely these days. But in the past there have been 32 bit
processors with 16 bit data bus. So you would need two write operations =
on the bus. And in a SMP scenario these need not be atomic. Again, not =
very likely but possible. Bottom line is that the JVM spec does not
make any guarantees here (=A717.7 see Lew's reference).
In 32 bit, there is an assembler instruction cmpxchg8b designed to let
you implement a light weight atomic 64-bit read.
Since you do not know on what JVM your Java program will run when you
write it (or at least someone can choose to use a different JVM model)
it is safer to code under the assumption that a long and double write is =
two operations i.e. not atomic. To remedy that there is AtomicLong.
For double handling see the end of the JavaDoc at
remember.guy do |as, often| as.you_can - without end