Hello,
Je suis actuellement en train de réaliser une abstraction aux mutex sous windows, et pour cela, j'utilise une CRITICAL_SECTION. Le probleme c'est que je ne comprends pas pourquoi lorsque je fais deux fois d'affiler un EnterCriticalSection avec le meme pointeur sur CRITICAL_SECTION, le deuxieme appel n'est pas bloquant ... Si quelqu'un pouvais m'expliquer, d'avance merci.
La sortie est :
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 class WinMutex : public IMutex { public: WinMutex(); ~WinMutex(); void lock(); void unlock(); private: CRITICAL_SECTION _mutexHandle; }; WinMutex::WinMutex() { InitializeCriticalSection(&this->_mutexHandle); } WinMutex::~WinMutex() { DeleteCriticalSection(&this->_mutexHandle); } void WinMutex::lock() { std::cout << __FUNCTION__ << std::endl; EnterCriticalSection(&this->_mutexHandle); } void WinMutex::unlock() { LeaveCriticalSection(&this->_mutexHandle); } typedef TMutex<WinMutex> Mutex; void test() { Mutex mutex; mutex.lock(); std::cout << "isLocked: " << std::boolalpha << mutex.isLocked() << std::endl; mutex.lock(); // DEAD LOCK std::cout << "Failure" << std::endl; //mutex.unlock(); }
WinMutex::lock
isLocked: true
WinMutex::lock
Failure
Partager