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.

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();
}
La sortie est :
WinMutex::lock
isLocked: true
WinMutex::lock
Failure