[cpp-threads] A niggle on the atomic model (N2145)

Nick Maclaren nmm1 at cus.cam.ac.uk
Thu Apr 19 12:15:18 BST 2007


This is why N2145 can't be implemented in one (VERY small) detail, which
should be dropped.  The problem is extending "address-free" to allow two
address values in the program (virtual addresses) to map to the same
location (physical address), and making that defined behaviour for the
atomics.

Consider an Alpha-like system (load-locked + store-conditional)
operating on an integer/point that may span two hardware memory
locations (e.g.  64-bit on a 32-bit 'bus').  One obvious code for
an atomic copy is:

if (A != B)
    do {
        X = load_locked(A[0]);
        Y = load_locked(A[1]);
    } while
        store_conditional(B[0]) &&
            store_conditional(B[1]);

This will loop indefinitely if A and B map to the same location, and
I can think of no way that the application can detect that, reliably
and portably, let alone for reasonable efficiency.

Can anyway see a flaw in my argument?


Regards,
Nick Maclaren,
University of Cambridge Computing Service,
New Museums Site, Pembroke Street, Cambridge CB2 3QH, England.
Email:  nmm1 at cam.ac.uk
Tel.:  +44 1223 334761    Fax:  +44 1223 334679



More information about the cpp-threads mailing list