Boost logo

Boost :

Subject: Re: [boost] [lockfree] Review
From: Helge Bahmann (hcb_at_[hidden])
Date: 2011-08-08 00:44:23


On Saturday 06 August 2011 08:30:05 Gottlob Frege wrote:
> On Wed, Aug 3, 2011 at 7:06 AM, Helge Bahmann <hcb_at_[hidden]> wrote:
> >> > - if the data is changing (through a writable mapping by someone else
> >> > to the
> >> > page), then you have some sort of producer-/consumer-problem and that
> >> > is
> >> > trivialley solvable with word-sized atomic operations
> >>
> >> Really?
> >
> > yes, really
> >
> > keep an "even" and an "odd" copy of your data structure, keep an
> > atomically readable "generation counter" -- on access, read the
> > generation counter, read the data (depending on parity of generation
> > counter), read the generation counter again
> >
> > if it changed, start over. if it didn't change, you have your data; on
> > modification, update generation counter as appropriate (if you are
> > paranoid about counter overflows, you can repeat a similar trick with the
> > counter itself)
>
> This is single producer / single consumer? (probably works for spmc
> too). But not multi-producer. Right?

right, but you can always build consensus on your data somewhere else for
multiple producers, then build consensus on who gets to "commit" the data to
the pure consumers (probably this will work in a single step). While this
adds another "copy" operation to the producer path, a few stores are lost in
the noise compared to even a single interlocked cmpxchg.

Helge


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk