cedricbi
Messages postés185Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention21 mars 2011
-
21 mars 2011 à 18:34
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDerniè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();
}
}
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 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();
}
}