IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

probl�me de mutex


Sujet :

MFC

  1. #1
    Membre �clair�
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Par d�faut probl�me de mutex
    J'ai deux exe, chacun essayant d'acc�der � une ressource partag�e.
    J'ai une m�thode de r�servation de la ressource :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    bool Mutex::_WaitFor ()
    {
    	try {
    		DWORD dwWaitResult = WaitForSingleObject (m_Mutex, m_WaitingForMutex);
    		switch (dwWaitResult)
    		{
    			case WAIT_OBJECT_0 :
    				m_CurrentErr = "";
    				return true;
    			case WAIT_TIMEOUT :
    				throw ExceptionWaitTimeOutMutex();
    			case WAIT_FAILED :
    				throw ExceptionWaitFailedMutex();
    			default :
    				throw ExceptionUnknowMutex();
    		}
    	}
    	catch (ExceptionWaitTimeOutMutex e) {
    		m_CurrentErr = e.GetError();
    		return false;
    	}
    	catch (ExceptionWaitFailedMutex e) {
    		m_CurrentErr = e.GetError();
    		return false;
    	}
    	catch (ExceptionUnknowMutex e) {
    		m_CurrentErr = e.GetError();
    		return false;
    	}
    	catch (...) {
    		m_CurrentErr = static_cast<CString>("Could not access to mutex");
    		return false;
    	}
    }
    et une pour la lib�ration :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    bool Mutex::Release ()
    {
    	try {
    		BOOL	bReleased = FALSE;
    		if ((bReleased =ReleaseMutex(m_Mutex)) == TRUE) 
    			bReleased = CloseHandle (m_Mutex);
    		if (bReleased == FALSE)
    			m_CurrentErr = static_cast<CString>("Could not release mutex");
    		m_Mutex = 0;
    		return true ? bReleased == TRUE : false;
    	}
    	catch (...) {
    		m_CurrentErr = static_cast<CString>("Could not release mutex");
    		return false;
    	}
    }
    Je lance mes deux exe (e1 et e2) en parall�le.
    _ e2 essaie de r�server la ressource partag�e alors que e1 est en train d'y travailler dessus (donc ne l'a pas lib�r�e mais l'a r�serv�e). e1 lib�re la resource (par Release()) mais e2 ne peut toujours pas y acc�der. Il attend que l'ex�cutable e1 ait fini son traitement et se kille pour pouvoir r�server la ressource.
    _ Par contre, si e1 r�serve la resource et la lib�re, e2 peut la r�server et l'utiliser ; e1 peut ensuite la r�server puis la lib�rer, ...
    Si un de mes exe r�serve la resource et la lib�re, un autre process peut y acc�der. Par contre, si un exe essaie d'y acc�der alors que l'autre ne l'a pas lib�r�e ; alors le process attendant la resource est oblig� d'attendre que l'autre process soit totalement fini.

    J'ai �t� clair j'esp�re ?

  2. #2
    Membre �clair�
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Par d�faut
    Au fait, ma question est : qu'est-ce qu'il faut ajouter comme option (lors du CreateMutex ou de l'OpenMutex) pour �viter ce probl�me svp ?
    D'ailleurs voil� la m�thode de cr�ation du mutex :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    bool Mutex::_Open ()
    {
    	try {
    		if (m_Mutex == 0) 
    			if (!(m_Mutex = OpenMutex (SYNCHRONIZE, TRUE, m_MutexName))) 
    				m_Mutex = CreateMutex (NULL, FALSE, m_MutexName);
    		return true;
    	}
    	catch (...) {
    		return false;
    	}
    }

  3. #3
    Membre �clair�
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Par d�faut
    OK, c'�tait l'appel succ�ssif � WaitForSingleObject qui consid�rait que je prenais plusieurs jetons apparement.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Probl�me de Mutex
    Par sinfoni dans le forum API, COM et SDKs
    R�ponses: 4
    Dernier message: 07/12/2010, 18h09
  2. Probl�me de mutex en mode release
    Par fredppp dans le forum C++/CLI
    R�ponses: 3
    Dernier message: 05/11/2010, 20h26
  3. [Protection de donn�es] Probl�me de mutex
    Par DSGSLA dans le forum Multithreading
    R�ponses: 11
    Dernier message: 04/02/2010, 16h34
  4. probl�me de mutex et de condition
    Par mitmat dans le forum SDL
    R�ponses: 4
    Dernier message: 03/04/2008, 17h25
  5. Probl�me de mutex avec Waitforsingleobject non-bloquant
    Par rvzip64 dans le forum API, COM et SDKs
    R�ponses: 6
    Dernier message: 03/11/2005, 11h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo