Boost logo

Boost Users :

From: Peter Dimov (pdimov_at_[hidden])
Date: 2002-02-16 06:37:50


From: "Colin Fox" <cfox_at_[hidden]>
> On Fri, 2002-02-15 at 11:31, Peter Dimov wrote:
> > From: "Colin Fox" <cfox_at_[hidden]>
> <..>
> > >
> > > I'm using gcc 3.0.3 on Linux, and boost 1.27.
> >
> > Can you simplify the program to the bare minimum that still has the
problem?
>
> Not very easily, but if I can't make any progress, I'll do that.

OK, let me explain the exact level of thread safety provided by shared_ptr;
it might be of help.

shared_ptr (in 1.27+) is (should be) thread neutral. A class X is thread
neutral when:

* Accessing two different objects of class X is safe, even when they are
equivalent copies;
* Accessing the same object is safe only when all accesses are read
accesses; otherwise the behavior is undefined.

For example, under the pthreads memory model all C types are thread neutral.

This means that:

shared_ptr p;

// thread 1

shared_ptr q(p); // read p

// thread 2

shared_ptr r(p); // read p

is safe.

// thread 1

q.reset(); // write q

// thread 2

r.reset(); // write r

is safe.

// thread 1

shared_ptr s(p); // read p

// thread 2

p.reset(); // write p

is undefined behavior.

If your program doesn't read/write or write/write (to) the same shared_ptr
simultaneously, and still misbehaves, then there is a bug in shared_ptr that
we'll have to track down.


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net