2012/4/18 Yuanlong Shao <shaoyl85@gmail.com>
Hi all,

If I do the following
----------------------------------------------------------------------------------------------------------
shared_ptr<int> pA( new int(1) );
shared_ptr<int> pB( new int(2) );
shared_ptr<int> pNew( new int(3) );

// thread A
pA = pB;

// thread B
pB = pNew;
----------------------------------------------------------------------------------------------------------

I know that whether pA will be int(2) or int(3) after execution is
undefined, but if I do want to do this no matter what value of
pA I get, will this cause atomicity problem? I mean, thread A
increases counter for int(2), but thread B decrease it, is this
thread safe?

No, it's not thread safe. It's not allowed to read a shared_ptr while another thread simultaneously modifies the same object. See http://www.boost.org/doc/libs/1_49_0/libs/smart_ptr/shared_ptr.htm#ThreadSafety.

Roman Perepelitsa.