Boost logo

Boost :

From: Talbot, George (Gtalbot_at_[hidden])
Date: 2006-11-10 09:39:35


> Talbot, George wrote:
> > Hi,
> >
> > I have a question for the designers and implementers of
> > boost::shared_ptr:
> >
> > Is there any plan afoot to support lock-free programming using
> > shared_ptr? I was fooling around with wanting to attempt lock-free
> > update of a tree structure that I have that uses shared_ptr. If
> > no-one's thinking about this, how might I go about implementing:
> >
> > bool boost::shared_ptr<T>::compare_and_swap(T* original,
> > shared_ptr<T>& new_one)
>

Peter Dimov wrote:
>
> Very, very difficult. :-) shared_ptr is not atomic;

I can pass a shared_ptr between threads right now, correct?

> you can look at Joe Seigh's atomic_ptr:
>
> http://atomic-ptr-plus.sourceforge.net/
>
> and Chris Thomasson's
>
> http://appcore.home.comcast.net/vzoom/refcount/
>
> for examples of atomic reference counted pointers.
>
> Shared_ptr can be made atomic by using a spinlock. This isn't really
> lock-free, though.

I thought that the current implementation of shared_ptr is lock-free and
multithreaded in the sense that I can pass shared_ptr between threads,
and the reference count is updated correctly, etc. (I'm using BOOST
1.33.) Am I incorrect in thinking this?

I can see where compare_and_swap() probably can't be added without
adding a sequence number. Am I right saying that this is one of the
reasons adding this to shared_pointer isn't realistic?

--
George T. Talbot
<gtalbot_at_[hidden]>

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