[Windows] CRITICAL_SECITION EnterCriticalSection toujours OK
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:
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