Comportement étrange d'un Mutex

cedricbi Messages postés 185 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 21 mars 2011 - 21 mars 2011 à 18:34
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 - 23 mars 2011 à 00:12
Bonjour à tous,

Je ne comprend pas pourquoi cette fonction ne met pas 100 secondes pour s'exécuter.
Le thread n'est-il pas l'équivalent d'un Semaphore dont le compteur maximum vaut 1 ?
Car, j'ai essayé avec un Semaphore(1, 1), j'obtiens le résultat attendu et non pas l'éxecution de 100 threads simultanés.

Mutex mutex = new Mutex();
private void Wait()
{
    for(int i = 0; i < 100; i++)
    {
        mutex.WaitOne();
        Thread thread new Thread(()>
        {
            Thread.Sleep(1000);
            mutex.ReleaseMutex();
        });
        thread.Start();
    }
}

1 réponse

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
23 mars 2011 à 00:12
Bonjour,

L'appel de ReleaseMutex est ici effectué depuis un autre thread que celui qui l'a acquis.
En l'état ce code doit d'ailleurs lâcher un torrent d'exceptions.

Je ne suis pas certains d'avoir compris le sens de la chose mais un code de ce type me parait plus proche du comportement attendu :
Mutex mutex = new Mutex();
private void Wait()
{
    for (int i = 0; i < 100; i++)
    {
        mutex.WaitOne();
        Thread thread new Thread(()>
        {
            mutex.WaitOne();
            Thread.Sleep(1000);
            mutex.ReleaseMutex();
        });
        thread.Start();
        mutex.ReleaseMutex();
    }
}



/*
coq
CoqBlog
*/
0
Rejoignez-nous