
Compression is a good way to solve many ABA problems on architectures where CAS2 is not available. A compressing allocator/pointer pair would be required for any hope of portability. Of course, noncompressing version should be available for platofrm that could support it (such as Intel)
Yes, I actually combine the pointer and an ABA counter into one 64-bit value for legacy AMD systems that don't support CAS2. I have only tested this on Windows - I have no idea how other OSes lay out their memory. This also introduces the idea of "preparing" a pointer for CAS, though the algorithm code can still be generic enough for all archs.
http://svn.int64.org/svnroot/int64/snips/lockfree/tagged_ptr.x64.hpp
i have just implemented a compressed pointer for the x86_64 architecture, tested on one linux machine ... http://tim.klingt.org/git?p=boost_lockfree.git;a=blob;f=boost/lockfree/ tagged_ptr_ptrcompression.hpp cheers, tim -- tim@klingt.org http://tim.klingt.org Silence is only frightening to people who are compulsively verbalizing. William S. Burroughs