Boost logo

Boost :

From: JOAQUIN LOPEZ MU?Z (joaquin_at_[hidden])
Date: 2006-07-04 14:40:55


Hello,

A naive usage of intrusive_ptr involves having a
refcount embedded in the pointed to object and
providing add_red and release functions like:

void intrusive_ptr_add_ref(const my_class* p)
{
  ++(p->ref);
}

template<typename T>
void intrusive_ptr_release(const my_class* p)
{
  if(--(p->ref)==0){
    // whatever
  }
}

But, AFAICS, this is not thread safe, as intrusive_ptr
itself does not add any thread safety layer. So my
question is how to efficiently provide add_ref and release
functions which are thread safe (wrt to refcounting)? I can
use a class-level boost::detail::lightweight_mutex in the
obvious way, but I understand shared_ptr uses much more
advanced mechanisms and maybe these are available for
(semi)public consuption at boost/detail.

Thank you,

Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo


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