|
Boost : |
From: Ben Hutchings (ben.hutchings_at_[hidden])
Date: 2004-09-28 07:36:00
Alexander Terekhov <terekhov_at_[hidden]> wrote:
> Ben Hutchings wrote:
> [...]
> > If atomic_read
> > returns 0 that means the use count has dropped to 0 [*] and can
> > never increase again, so it must be the latest version. Otherwise
> > weak_ptr makes a second test that is properly protected. So it can
> > never use an old value.
> >
> > [*] I think this is right but I'm not certain that it can't return a
> > 0 that the processor read during creation of an object that
> > uses enable_shared_from_this.
>
> What makes you uncertain?
Simply not having thought enough about it. Now that I have done, I
realise that it's impossible for a thread to use a weak_ptr to an
object without either (1) constructing a shared_ptr to it, setting the
use count to be non-zero, or (2) synchronising with another thread
that constructs the shared_ptr and/or weak_ptr, which should provide
an appropriate memory barrier that will prevent the use of any invalid
pre-fetched value of the memory containing the use count.
> > Having said all that, I feel the naming of functions may give a
> > false sense of generality and encapsulation when they actually
> > only work in the way they are being used currently.
>
> You mean that
>
> bool expired() {
> return lock();
> }
>
> is better?
Not really. I will expand in my mail to Peter Dimov.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk