$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [boost] atomic_count::operator++ return type
From: Peter Dimov (pdimov_at_[hidden])
Date: 2009-04-12 09:24:06
JOAQUIN M. LOPEZ MUÑOZ:
> This does not work because of scenarios like the following:
>
> 1. Thread A detaches the last reference to x and is preempted
> when it's about to enter erase.
> 2. Thread B retrieves x so that its refcount is now 1. After
> some work with x, thread B detaches the reference to x,
> whose refcount drops again to zero, enters erase and
> eliminates x.
> 3. Thread A resumes, but erase now attempts to work with
> a nonexistent x.
Here by x you mean the refcounted_value, I guess. Yes, this doesn't work if
'Handle' is a raw pointer, for example. I think, however, that it does work
if erase doesn't need to dereference the handle in order to see that it's
already been removed.