Re: [Boost-users] [Mutex] behaviour??

Yasmina Berber wrote:
Hi, everybody I have a problem to understand mutex behaviour in a server client program . basically there are two threads that execute different code in two different classes but manipulate the same resource: fisrt Class is Subscriber with these members :
public: ACE_Unbounded_Set
m_set; typedef boost::recursive_mutex Mutex; typedef boost::recursive_mutex::scoped_lock Lock; Mutex mutex_set; and methods: Subscribe (client_reference) : inserts (add) a reference client to the set { ... Lock theScope( mutex_set); m_set.insert (client_reference) ... } Unsubscribe(client_reference) : removes a reference client from the set { ... Lock theScope( mutex_set); m_set.remove (client_reference) }
the second class is Manager that has a shared pointer to Subscriber (SubscriberPtr) and does a specific opeartion on each client_reference inside a for loop in the method Manage() { boost::recursive_mutex::scoped_lock scoped_lock(subscriberPtr->mutex_set) for (Subscriber::Set_Iterator iter (subscriberPtr->m_set); iter.next (...) != 0 ; iter.advance ()) { specific opeartion on each client reference } } What happens is that a client can be removed (call to Unsubscribe()) by the first thread during the second one is executing manage() : the set is not well protected and this causes of course seg fault.
I probably do something wrong, If you need more details please let me know. Regards.
Hi Could any one help me in this forum? Thank you

Hi, everybody I have a problem to understand mutex behaviour in a server client
Haven't looked that closely at what you're doing but try making the mutex a static variable -----Original Message----- From: boost-users-bounces@lists.boost.org [mailto:boost-users-bounces@lists.boost.org] On Behalf Of Yasmina Berber Sent: 13 March 2008 11:15 To: boost-users@lists.boost.org Subject: Re: [Boost-users] [Mutex] behaviour?? Yasmina Berber wrote: program .
basically there are two threads that execute different code in two different classes but manipulate the same resource: fisrt Class is Subscriber with these members :
public: ACE_Unbounded_Set
m_set; typedef boost::recursive_mutex Mutex; typedef boost::recursive_mutex::scoped_lock Lock; Mutex mutex_set; and methods: Subscribe (client_reference) : inserts (add) a reference client to the set { ... Lock theScope( mutex_set); m_set.insert (client_reference) ... } Unsubscribe(client_reference) : removes a reference client from the set { ... Lock theScope( mutex_set); m_set.remove (client_reference) }
the second class is Manager that has a shared pointer to Subscriber (SubscriberPtr) and does a specific opeartion on each client_reference inside a for loop in the method Manage() { boost::recursive_mutex::scoped_lock scoped_lock(subscriberPtr->mutex_set) for (Subscriber::Set_Iterator iter (subscriberPtr->m_set); iter.next (...) != 0 ; iter.advance ()) { specific opeartion on each client reference } } What happens is that a client can be removed (call to Unsubscribe()) by the first thread during the second one is executing manage() : the set is not well protected and this causes of course seg fault.
I probably do something wrong, If you need more details please let me know. Regards.
Hi Could any one help me in this forum? Thank you _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users ______________________________________________________________________ This email has been scanned by the MessageLabs Email Security System. For more information please visit http://www.messagelabs.com/email ______________________________________________________________________ ****************************************************************************** "This message and any attachments are solely for the intended recipient and may contain confidential and privileged information. If you are not the intended recipient, any disclosure, copying, use, or distribution of the information included in this message and any attachments is prohibited. If you have received this communication in error, please notify us by reply e-mail and immediately and permanently delete this message and any attachments. Thank you." Interactive Transaction Solutions Ltd (2473364 England) Registered Office: Systems House, Station Approach Emsworth PO10 7PW ********************************************************************** Ce message �lectronique contient des informations confidentielles � l'usage unique des destinataires indiqu�s, personnes physiques ou morales. Si vous n'�tes pas le destinataire voulu, toute divulgation, copie, ou diffusion ou toute autre utilisation de ces informations, est interdite. Si vous avez re�u ce message �lectronique par erreur, nous vous remercions d'en avertir son exp�diteur imm�diatement par email et de d�truire ce message ainsi que les �l�ments attach�s. Interactive transaction Solutions SAS- France (RCS Pontoise : 489 397 877) Si�ge social : Parc Saint Christophe, 10, Avenue de l�Entreprise 95865 Cergy-Pontoise Cedex ______________________________________________________________________ This email has been scanned by the MessageLabs Email Security System. For more information please visit http://www.messagelabs.com/email ______________________________________________________________________
participants (2)
-
Patrick Loney
-
Yasmina Berber