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


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

Re: Volatile happens before question

From Lew <noone@lewscanon.com>
Newsgroups comp.lang.java.programmer
Subject Re: Volatile happens before question
Date 2012-01-18 00:06 -0800
Organization albasani.net
Message-ID <jf5uh7$9vh$1@news.albasani.net> (permalink)
References (6 earlier) <jf5184$r9f$1@dont-email.me> <jf52tt$9b9$1@dont-email.me> <jf5g64$uga$1@dont-email.me> <k0j9x3nt2or.70vxbwtikmz$.dlg@40tude.net> <jf5mm0$ndt$1@dont-email.me>

Show all headers | View raw


On 01/17/2012 09:52 PM, Knute Johnson wrote:
> Let's start over here:
>
> Thread 1
> int b = 0;
> volatile boolean a = false;
> ...
> ...
> a = true;
> b = 1;
>
> Thread 2
> int bStore = b;
> if (!a) {
> System.out.println("The value of b is " + bStore);
> }
>
> Will this always print either "The value of b is 0" or nothing.
>
> +++++++++++++++
>
> I'm not even sure what we are discussing any more so I will make a statement
> that I don't think can be false.

I'm going to go out on a limb here.

> If a is false at the if in thread 2 then b must be 0 in thread 2.

No.  Thread 2 could observe the write 'b = 1;' prior to observing the write 'a 
= true;'.

"observes" means "thread 2 observes from thread 1:".

«(observes 'a == false') implies (observes 'b = 0')».
This is clearly true because
   'b = 0' /hb/ 'a = false' /hb/ if (!a) true

«(observes 'b = 1') implies (observes 'a = true')»
«(observes 'a = true') implies (observes 'b = 1')»

Neither is true. There is no /hb/ between the two writes. Thread 2 can observe 
them in either order.

«(observes 'a == false') implies (!observes 'b = 1')».

There is no /hb/ between these two writes. Ergo thread 2 could view them in 
either order.

> In thread 1, b = 0 happens before a = false happens before a = true happens
> before b = 1.

Yes, but thread 2 does not have this /hb/ order. There is no inter-thread /hb/ 
that orders the writes 'a = false;', 'a = true;' and 'b = 1;'.  T2 can see 'b 
= 1;' prior to either write to 'a'.

> In thread 2, bStore = b happens before the test of a. Therefore bStore must be
> 0 in the print statement if a is false.

No. T2 can observe 'b = 1;' because no promise or prevention applies to writes 
that happen after the observed write to 'a'.

> And if a is true at the test in thread 2 then b could be either 0 or 1.
>
> Do we disagree on this?

There is no /hb/ among the writes to 'a' and the 'b = 1;' write that T2 can 
observe.  T2 can see consecutive writes of zero and one to 'b' before it sees 
any of the writes to 'a', or it could never see the 'b = 1;' write, or 
anything in between.

-- 
Lew
Honi soit qui mal y pense.
http://upload.wikimedia.org/wikipedia/commons/c/cf/Friz.jpg

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


Thread

Volatile happens before question "raphfrk@gmail.com" <raphfrk@gmail.com> - 2012-01-17 04:04 -0800
  Re: Volatile happens before question Peter Duniho <NpOeStPeAdM@NnOwSlPiAnMk.com> - 2012-01-17 08:17 -0800
    Re: Volatile happens before question markspace <-@.> - 2012-01-17 08:50 -0800
      Re: Volatile happens before question "raphfrk@gmail.com" <raphfrk@gmail.com> - 2012-01-17 09:00 -0800
    Re: Volatile happens before question "raphfrk@gmail.com" <raphfrk@gmail.com> - 2012-01-17 08:54 -0800
      Re: Volatile happens before question markspace <-@.> - 2012-01-17 11:24 -0800
    Re: Volatile happens before question Patricia Shanahan <pats@acm.org> - 2012-01-17 14:49 -0800
      Re: Volatile happens before question Knute Johnson <nospam@knutejohnson.com> - 2012-01-17 15:49 -0800
      Re: Volatile happens before question Peter Duniho <NpOeStPeAdM@NnOwSlPiAnMk.com> - 2012-01-17 17:14 -0800
        Re: Volatile happens before question Patricia Shanahan <pats@acm.org> - 2012-01-17 18:17 -0800
          Re: Volatile happens before question Joshua Maurice <joshuamaurice@gmail.com> - 2012-01-19 16:45 -0800
  Re: Volatile happens before question Knute Johnson <nospam@knutejohnson.com> - 2012-01-17 08:18 -0800
    Re: Volatile happens before question markspace <-@.> - 2012-01-17 08:33 -0800
      Re: Volatile happens before question Knute Johnson <nospam@knutejohnson.com> - 2012-01-17 08:49 -0800
        Re: Volatile happens before question Knute Johnson <nospam@knutejohnson.com> - 2012-01-17 09:21 -0800
          Re: Volatile happens before question markspace <-@.> - 2012-01-17 10:10 -0800
            Re: Volatile happens before question Daniel Pitts <newsgroup.nospam@virtualinfinity.net> - 2012-01-17 10:28 -0800
              Re: Volatile happens before question markspace <-@.> - 2012-01-17 10:41 -0800
                Re: Volatile happens before question Daniel Pitts <newsgroup.nospam@virtualinfinity.net> - 2012-01-17 11:06 -0800
                Re: Volatile happens before question markspace <-@.> - 2012-01-17 12:09 -0800
                Re: Volatile happens before question markspace <-@.> - 2012-01-17 12:12 -0800
                Re: Volatile happens before question "raphfrk@gmail.com" <raphfrk@gmail.com> - 2012-01-17 12:38 -0800
                Re: Volatile happens before question markspace <-@.> - 2012-01-17 13:35 -0800
                Re: Volatile happens before question markspace <-@.> - 2012-01-17 14:41 -0800
                Re: Volatile happens before question Patricia Shanahan <pats@acm.org> - 2012-01-17 14:55 -0800
                Re: Volatile happens before question markspace <-@.> - 2012-01-17 15:27 -0800
                Re: Volatile happens before question Peter Duniho <NpOeStPeAdM@NnOwSlPiAnMk.com> - 2012-01-17 17:37 -0800
                Re: Volatile happens before question Peter Duniho <NpOeStPeAdM@NnOwSlPiAnMk.com> - 2012-01-17 17:42 -0800
            Re: Volatile happens before question Knute Johnson <nospam@knutejohnson.com> - 2012-01-17 15:46 -0800
              Re: Volatile happens before question markspace <-@.> - 2012-01-17 16:14 -0800
                Re: Volatile happens before question Knute Johnson <nospam@knutejohnson.com> - 2012-01-17 20:01 -0800
                Re: Volatile happens before question Peter Duniho <NpOeStPeAdM@NnOwSlPiAnMk.com> - 2012-01-17 20:37 -0800
                Re: Volatile happens before question Knute Johnson <nospam@knutejohnson.com> - 2012-01-17 21:52 -0800
                Re: Volatile happens before question Peter Duniho <NpOeStPeAdM@NnOwSlPiAnMk.com> - 2012-01-17 23:47 -0800
                Re: Volatile happens before question Peter Duniho <NpOeStPeAdM@NnOwSlPiAnMk.com> - 2012-01-18 00:08 -0800
                Re: Volatile happens before question Knute Johnson <nospam@knutejohnson.com> - 2012-01-18 09:04 -0800
                Re: Volatile happens before question Steven Simpson <ss@domain.invalid> - 2012-01-18 11:22 +0000
                Re: Volatile happens before question "raphfrk@gmail.com" <raphfrk@gmail.com> - 2012-01-18 06:24 -0800
                Re: Volatile happens before question Peter Duniho <NpOeStPeAdM@NnOwSlPiAnMk.com> - 2012-01-18 07:32 -0800
                Re: Volatile happens before question "raphfrk@gmail.com" <raphfrk@gmail.com> - 2012-01-18 08:34 -0800
                Re: Volatile happens before question markspace <-@.> - 2012-01-18 10:12 -0800
                Re: Volatile happens before question "raphfrk@gmail.com" <raphfrk@gmail.com> - 2012-01-18 11:15 -0800
                Re: Volatile happens before question markspace <-@.> - 2012-01-18 11:59 -0800
                Re: Volatile happens before question "raphfrk@gmail.com" <raphfrk@gmail.com> - 2012-01-18 12:24 -0800
                Re: Volatile happens before question markspace <-@.> - 2012-01-18 13:16 -0800
                Re: Volatile happens before question Knute Johnson <nospam@knutejohnson.com> - 2012-01-18 15:00 -0800
                Re: Volatile happens before question markspace <-@.> - 2012-01-18 16:12 -0800
                Re: Volatile happens before question Patricia Shanahan <pats@acm.org> - 2012-01-18 16:34 -0800
                Re: Volatile happens before question markspace <-@.> - 2012-01-18 17:17 -0800
                Re: Volatile happens before question Patricia Shanahan <pats@acm.org> - 2012-01-18 19:03 -0800
                Re: Volatile happens before question "raphfrk@gmail.com" <raphfrk@gmail.com> - 2012-01-18 15:30 -0800
                Re: Volatile happens before question markspace <-@.> - 2012-01-18 16:10 -0800
                Re: Volatile happens before question "raphfrk@gmail.com" <raphfrk@gmail.com> - 2012-01-19 08:18 -0800
                Re: Volatile happens before question markspace <-@.> - 2012-01-19 09:40 -0800
                Re: Volatile happens before question "raphfrk@gmail.com" <raphfrk@gmail.com> - 2012-01-19 10:10 -0800
                Re: Volatile happens before question markspace <-@.> - 2012-01-19 10:39 -0800
                Re: Volatile happens before question "raphfrk@gmail.com" <raphfrk@gmail.com> - 2012-01-19 12:13 -0800
                Re: Volatile happens before question markspace <-@.> - 2012-01-19 13:31 -0800
                Re: Volatile happens before question "raphfrk@gmail.com" <raphfrk@gmail.com> - 2012-01-19 16:14 -0800
                Re: Volatile happens before question markspace <-@.> - 2012-01-19 21:16 -0800
                Re: Volatile happens before question "raphfrk@gmail.com" <raphfrk@gmail.com> - 2012-01-20 03:23 -0800
                Re: Volatile happens before question "raphfrk@gmail.com" <raphfrk@gmail.com> - 2012-01-20 06:46 -0800
                Re: Volatile happens before question markspace <-@.> - 2012-01-20 08:56 -0800
                Re: Volatile happens before question Lew <noone@lewscanon.com> - 2012-01-20 11:12 -0800
                Re: Volatile happens before question Peter Duniho <NpOeStPeAdM@NnOwSlPiAnMk.com> - 2012-01-18 17:06 -0800
                Re: Volatile happens before question Daniel Pitts <newsgroup.nospam@virtualinfinity.net> - 2012-01-19 12:46 -0800
                Re: Volatile happens before question markspace <-@.> - 2012-01-19 13:38 -0800
                Re: Volatile happens before question Peter Duniho <NpOeStPeAdM@NnOwSlPiAnMk.com> - 2012-01-18 07:32 -0800
                Re: Volatile happens before question Lew <noone@lewscanon.com> - 2012-01-18 00:06 -0800
                Re: Volatile happens before question Knute Johnson <nospam@knutejohnson.com> - 2012-01-18 09:23 -0800
                Re: Volatile happens before question Joshua Maurice <joshuamaurice@gmail.com> - 2012-01-19 17:07 -0800
                Re: Volatile happens before question Joshua Maurice <joshuamaurice@gmail.com> - 2012-01-19 17:12 -0800
                Re: Volatile happens before question Joshua Maurice <joshuamaurice@gmail.com> - 2012-01-19 19:22 -0800
  Re: Volatile happens before question Daniel Pitts <newsgroup.nospam@virtualinfinity.net> - 2012-01-17 10:24 -0800

csiph-web