
Thanks for the response. What if I place accesses to the global pointer within critical sections (indicated by mutex.lock()-unlock()) ? I've enclosed the dominant portions of the code in while loops. Does this make it thread safe ? <code> //initializion Thread (runs before any other thread): shared_ptr< MyClass > global_ptr(createNewObject()) ; //WriterThread : while(true) {mutex.lock()global_ptr.reset( createNewObject())mutex.unlock();sleep (5) ;} //ReaderThreads: mutex.lock()weak_ptr<MyClass> local_weak_ptr (globally_ptr) ;mutex.lock()...while(true) {if(shared_ptr< MyClass > local_shared_ptr = local_weak_ptr.lock() ) { // using local_shared_ptr.} else { // recreate weak ptr from global ?}} // end of while loop </code> From: Gottlob Frege <gottlobfrege@gmail.com> Subject: Re: [Boost-users] shared_ptr and weak_ptr concurrency To: boost-users@lists.boost.org Date: Wednesday, September 2, 2009, 8:21 AM On Mon, Aug 31, 2009 at 8:32 PM, Rajeev Rao <rbsrao79@yahoo.co.in> wrote: This is the first time I'm using boost in a multi-threaded env (linux x86_64,gcc 4). This question may have been asked in other forms. However, from what I've been able to search (google) up, I could not get a crystal clear answer. I'm essentially trying to use the solution provided in this page. http://onlamp.com/pub/a/onlamp/2006/05/04/smart-pointers.html?page=5.
From the boost documentation, it appears that this could be an undefined operation as the global shared pointer is being read and written to by multiple threads. Is that correct ?
In case the link fails or someone wants more details, please read on. I've got a n reader threads and 1 writer thread. initializion Thread : shared_ptr< MyClass > global_ptr(createNewObject()) ; WriterThread :global_ptr.reset( createNewObject()) ReaderThreads:weak_ptr<MyClass> local_weak_ptr (globally_ptr) ;... if(shared_ptr< MyClass > local_shared_ptr = local_weak_ptr.lock() ) { // using local_shared_ptr.} else { // recreate weak ptr from global ?} thanks. Rajeev I don't think that code is thread-safe. You can modify the shared count safely between threads, but you can't modify the pointer itself. Tony -----Inline Attachment Follows----- _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users