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


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

Re: Volatile happens before question

From Peter Duniho <NpOeStPeAdM@NnOwSlPiAnMk.com>
Subject Re: Volatile happens before question
Newsgroups comp.lang.java.programmer
References (14 earlier) <s96bklu5m72u.h0brrnp2d8fq$.dlg@40tude.net> <f8b028b6-9f5b-4838-bae3-9a1d1b0716d3@l1g2000vbc.googlegroups.com> <jf7239$k2b$1@dont-email.me> <726da9ce-57f4-4136-b50b-56a032aca196@f1g2000yqi.googlegroups.com> <jf78bd$s4v$1@dont-email.me>
Date 2012-01-18 17:06 -0800
Message-ID <t8vcjhazyvos$.2mmkolb78ch6.dlg@40tude.net> (permalink)

Show all headers | View raw


On Wed, 18 Jan 2012 11:59:39 -0800, markspace wrote:

> [...]
> The bit that confuses me is that he "protects" his map with a write counter:
> 
>      writeCounter.getAndIncrement();
>      map.put(key, value);
>      writeCounter.getAndIncrement();
> 
> And then allows the reader(s) into the critical section whenever the 
> writeCounter is even (why not just decrement the counter after a write 
> access?).

Decrementing the counter would prevent the reader from detecting that a
write to the data structure had occurred while the reader was trying to
retrieve the value.

Now, that said...I retract my previous statement that the code is safe.
The code ensures that the reader won't attempt to _start_ reading if a
write is in progress.  But there's nothing to prevent the writer from
starting to write while a read is in progress.

This could result in a corrupted read at best, and a program crash at worst
(if the data structure winds up in an invalid intermediate state just at
the wrong time).  The reader can detect the corrupted read (because the
counter has been incremented), but has nothing to protect itself from an
exception.

>      while (((save = writeCounter.get()) & 1) == 1);
>      value = map.get(key);
> 
> So if a reader starts "first" and passes the first test 
> (writeCounter==0), and then starts to access the map, and then a writer 
> comes in and also begins to access the map... yeah you have two threads 
> accessing the map at the same time.  This doesn't seem to work at all.

Agreed.

Pete

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