Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #10691

Re: Volatile keyword

From Robert Klemme <shortcutter@googlemail.com>
Newsgroups comp.lang.java.programmer
Subject Re: Volatile keyword
Date 2011-12-13 08:37 +0100
Message-ID <9kodm9FfqrU1@mid.individual.net> (permalink)
References <41fa02ff-3f20-41bc-90d9-c3f7d3651fbf@n6g2000vbg.googlegroups.com> <jc5ffc$28s$1@dont-email.me> <ddkce71iqujhrsrslsca33a5nep023c4si@4ax.com>

Show all headers | View raw


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 (ยง17.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
http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/atomic/package-summary.html

Kind regards

	robert

-- 
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/

Back to comp.lang.java.programmer | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Volatile keyword "raphfrk@gmail.com" <raphfrk@gmail.com> - 2011-12-12 04:51 -0800
  Re: Volatile keyword Andreas Leitgeb <avl@gamma.logic.tuwien.ac.at> - 2011-12-12 14:31 +0000
    Re: Volatile keyword "raphfrk@gmail.com" <raphfrk@gmail.com> - 2011-12-12 06:52 -0800
  Re: Volatile keyword Lew <lewbloch@gmail.com> - 2011-12-12 06:34 -0800
  Re: Volatile keyword markspace <-@.> - 2011-12-12 10:00 -0800
    Re: Volatile keyword Tom Anderson <twic@urchin.earth.li> - 2011-12-12 18:41 +0000
      Re: Volatile keyword Patricia Shanahan <pats@acm.org> - 2011-12-12 11:43 -0800
    Re: Volatile keyword Roedy Green <see_website@mindprod.com.invalid> - 2011-12-12 11:15 -0800
      Re: Volatile keyword Robert Klemme <shortcutter@googlemail.com> - 2011-12-13 08:37 +0100
        Re: Volatile keyword Peter Duniho <NpOeStPeAdM@NnOwSlPiAnMk.com> - 2011-12-12 23:54 -0800
          Re: Volatile keyword Robert Klemme <shortcutter@googlemail.com> - 2011-12-14 19:39 +0100
            Re: Volatile keyword Daniel Pitts <newsgroup.nospam@virtualinfinity.net> - 2011-12-14 10:59 -0800
            Re: Volatile keyword Patricia Shanahan <pats@acm.org> - 2011-12-14 11:00 -0800
              Re: Volatile keyword Robert Klemme <shortcutter@googlemail.com> - 2011-12-14 22:35 +0100
  Re: Volatile keyword Roedy Green <see_website@mindprod.com.invalid> - 2011-12-12 10:55 -0800

csiph-web