weak_ptr::lock is not thread safe
Hi All,
I've just realized weak_ptr::lock is not thread safe. Is it expected
behavior? Following sample reproduced this conclusion.
#include <iostream>
#include
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On Thursday 16 December 2010, Dmytro Ovdiienko wrote:
I've just realized weak_ptr::lock is not thread safe. Is it expected behavior? Following sample reproduced this conclusion.
It is thread safe. Your code appears to have a race in it between destroying the shared_ptr and locking the weak_ptr. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (GNU/Linux) iEYEARECAAYFAk0KPcEACgkQ5vihyNWuA4WVkACeIk8QpbEhF5/k5szY2o6rJ7Ep gHgAoOVPbV/uBAsZTWWjqrwClK6ITZeK =6DeE -----END PGP SIGNATURE-----
Frank,
Thanks.
My program sometimes generates segfault. Looks like problem is not in the
boost :-\
On 16 December 2010 18:26, Frank Mori Hess
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
On Thursday 16 December 2010, Dmytro Ovdiienko wrote:
I've just realized weak_ptr::lock is not thread safe. Is it expected behavior? Following sample reproduced this conclusion.
It is thread safe. Your code appears to have a race in it between destroying the shared_ptr and locking the weak_ptr.
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (GNU/Linux)
iEYEARECAAYFAk0KPcEACgkQ5vihyNWuA4WVkACeIk8QpbEhF5/k5szY2o6rJ7Ep gHgAoOVPbV/uBAsZTWWjqrwClK6ITZeK =6DeE -----END PGP SIGNATURE----- _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
-- Dmytro Ovdiienko e-mail: dmitriy.ovdienko@gmail.com skype: dmitriy.ovdienko@gmail.com mobile: +38050-1909731
From: Dmytro Ovdiienko:
class SomeClass{ public: boost::shared_ptr<SomeClass> s_this_; boost::weak_ptr<SomeClass> w_this_;
SomeClass() { s_this_.reset( this ); w_this_ = s_this_;
Shouldn't you be using shared_from_this()? Creating a shared_ptr from "this" doesn't work otherwise. Check out the shared_ptr docs for more info. Cliff
participants (3)
-
Cliff Green
-
Dmytro Ovdiienko
-
Frank Mori Hess