Je crois que vous avez des fenêtres confusion serrures (mutex, sections critiques) avec les moniteurs .Net (qui en C# peut utiliser le verrouillage mot-clé comme le sucre de syntaxe pour entrer/sortir un bloc.)
de Windows mutex et critique les sections peuvent seulement être entrées et sorties, c'est-à-dire qu'une seule file d'attente leur est associée. Tous les threads dans la file d'attente attendent que le verrou soit libéré et lorsque cela se produit, le thread suivant dans la file d'attente prend le contrôle du verrou et commence à s'exécuter. Tout cela se passe automatiquement. Le thread qui détient actuellement le verrou n'a aucune part dans cela, il ne peut pas choisir de réveiller un ou plusieurs des autres threads attendant que le verrou soit libéré.
Le moniteur de Net possède deux files d'attente: une file d'attente prête et une file d'attente.
La file d'attente prête se comporte exactement comme une file d'attente Win32 Mutex ou Critical Section et est contrôlée à l'aide des méthodes Enter/Leave.
La file d'attente est une file d'attente séparée contrôlée à l'aide des méthodes Wait/Pulse/PulseAll. Ces méthodes ne peuvent être appelées que par le thread qui maintient le moniteur. Lorsqu'un thread appelle Wait, il libère le moniteur et entre dans la file d'attente. Un thread différent peut alors appeler soit Pulse pour déplacer un thread ou Pulse All pour déplacer tous les threads de l'attente à la file d'attente prête (rappelez-vous le thread appel Pulse/PulseAll détient le moniteur.)
D'un point de vue informatique le Moniteur est la seule primitive nécessaire synchroniser les threads (sémaphores, événements, mutex, barrières, etc. peuvent tous être implémentés avec les moniteurs), d'un point de vue pratique Les moniteurs sont utiles comme mutex et pour les situations où les actions doivent être effectuées threads en lock-step. La plupart du temps, cependant, le code est plus lisible lors de l'utilisation d'événements.
Pour en savoir plus:
Wikipedia page about Monitors for the historic/computer science aspect
MSDN Monitor class
Si c'est un verrou (mutex, section critique), ce qui pourrait être le point de se réveiller plus d'un thread en attente pour elle? Pourquoi "ils peuvent potentiellement se rendormir", alors que cela semble être la seule chose possible? –