Brian Pane wrote:

3. Providing cas32 is risky.  It tempts people to build lock-free
data structures with it, but the necessary memory barriers are
difficult to use right, and few people even realize that memory
barriers are necessary on some multiprocessor systems.


You're right; this is another aspect of the old API that
we probably need to rethink.  In the past, apr_atomic_cas
has implicitly included a memory barrier on many systems--
e.g., it uses the lock prefix when doing a cmpxchg on x86--
but this hasn't been guaranteed on all platforms.  I'm not
sure which is the right solution: have the API guarantee
read and write ordering within the CAS function, or provide
a memory separate memory barrier function.  Any recommendations?

I'd say that it should be documented to include any memory barriers that are needed, I mean that is a portability concern, and APR is a portability library. I see a lot of people assuming that the atomic API would take care of that for them anyway, so we might as well document that it does and remove any doubt.


-garrett



Reply via email to