On 2013-10-13 06:54:04 +0000, Rainer Schuetze <r.sagita...@gmx.de> said:
I agree, that's why I used the term "shared reference", too ;-)
If you are using only shared objects, but not shared references, you'll
have to use message passing coming with its own set of synchronization
operations that are not easily made lock-free.
For one of my projects I implemented a shared pointer like this. It
uses the pointer value itself as a spin lock with the assumption that
-1 is an invalid pointer value:
1. read pointer value
2. if read value is -1 go to line 1 (spin)
3. compare and swap (previously read value <-> -1)
4. if failure go to line 1 (spin)
// now pointer is "locked", its value is -1 but we have a copy of the original
5. copy pointer locally or assign to it (and update counter)
6. write back pointer value atomically to replace the -1
No mutex, but there's a spin lock so it's not good if there's contention.
That said, I find it extremely rare to want a shared pointer that isn't
already protected by a mutex alongside other variables, or that isn't
propagated using some form of message passing.
--
Michel Fortin
michel.for...@michelf.ca
http://michelf.ca