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

Threads & Processus C++ Discussion :

[Windows] CRITICAL_SECITION EnterCriticalSection toujours OK


Sujet :

Threads & Processus C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 30
    Par défaut [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 : 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

  2. #2
    Membre Expert

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Par défaut
    Bonjour,
    D'après msdn :

    After a thread has ownership of a critical section, it can make additional calls to EnterCriticalSection or TryEnterCriticalSection without blocking its execution. This prevents a thread from deadlocking itself while waiting for a critical section that it already owns.

  3. #3
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 30
    Par défaut
    Oh, merci!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 48
    Dernier message: 19/10/2009, 14h47
  2. Réponses: 48
    Dernier message: 19/10/2009, 14h47
  3. Windows Mobile - Toujours avoir une connexion
    Par cedriclyon dans le forum Bibliothèques
    Réponses: 0
    Dernier message: 21/04/2008, 10h00
  4. contrôle toujours 2D avec le thème Windows XP
    Par cedvac dans le forum Windows Forms
    Réponses: 2
    Dernier message: 21/02/2008, 19h29
  5. Démarrage de Windows XP toujours plus lent
    Par Alec6 dans le forum Windows XP
    Réponses: 10
    Dernier message: 17/01/2007, 10h46

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