|
Boost : |
From: Maxim Yegorushkin (maxim.yegorushkin_at_[hidden])
Date: 2006-07-07 04:33:16
JOAQUIN LOPEZ MU?Z wrote:
> 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.
An atomic counter should suffice. boost::detail::atomic_count.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk