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? Yuanlong Shao
2012/4/18 Yuanlong Shao
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#ThreadSaf... . Roman Perepelitsa.
participants (2)
-
Roman Perepelitsa
-
Yuanlong Shao