J'ai deux exe, chacun essayant d'acc�der � une ressource partag�e.
J'ai une m�thode de r�servation de la ressource :
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
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; } }
Je lance mes deux exe (e1 et e2) en parall�le.
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; } }
_ 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?
Partager