Partager via


Synchronisation de moniteurs, exemple de technologie

Mise à jour : novembre 2007

Cet exemple montre comment utiliser la classe Monitor pour une synchronisation de threads. Les fonctions statiques du type Monitor sont utilisées pour appliquer des règles d'accessibilité s'excluant mutuellement à un bloc de code protégé.

Pour plus d'informations sur la synchronisation de threads et sur la classe Monitor, consultez les commentaires figurant dans le code source et dans les fichiers build.proj.

Pour plus d'informations sur l'utilisation des exemples, consultez les rubriques suivantes :

Download sample

Pour générer l'exemple à partir de l'invite de commandes :

  1. Ouvrez une fenêtre d'invite de commandes et accédez à l'un des sous-répertoires spécifiques aux différents langages pour l'exemple.

  2. Tapez msbuild MonitorSynchronizationCS.sln ou msbuild MonitorSynchronizationVB.sln, selon votre choix de langage de programmation, à la ligne de commande.

Pour générer l'exemple à l'aide de Visual Studio :

  1. Ouvrez l'Explorateur Windows et accédez à l'un des sous-répertoires spécifiques aux différents langages de l'exemple.

  2. Double-cliquez sur l'icône de MonitorSynchronizationCS.sln ou de MonitorSynchronizationVB.sln, selon votre choix de langage de programmation, pour ouvrir le fichier dans Visual Studio.

  3. Dans le menu Générer, cliquez sur Générer la solution.

Pour exécuter l'exemple

  1. Accédez au répertoire qui contient le fichier exécutable généré, à l'aide de l'invite de commandes.

  2. Tapez Monitor.exe à partir de la ligne de commande.

Remarque :

Cet exemple génère une application console. Vous devez la lancer à l'aide de l'invite de commandes pour pouvoir afficher sa sortie. Lors de l'exécution de l'exemple, vous remarquerez que les sorties de démarrage de l'écriture et d'arrêt de l'écriture de chaque writer se produisent successivement sans chevauchement de threads portant des ID différents. En effet, les threads ont un accès exclusif à la ressource.

Notes

Les éléments de la liste suivante décrivent brièvement les classes et les technologies utilisées par cet exemple :

  • Synchronisation des threads

    • Monitor Offre des fonctions statiques permettant d'entrer dans un bloc de code protégé et d'en sortir. Vous ne pouvez pas instancier une instance du type Monitor. À la place, vous passez à ses méthodes statiques une référence à tout type dérivé d'objet à utiliser comme nœud de synchronisation.

      Remarque :

      Visual Basic et C# implémentent tous deux des mots clés spécifiques permettant de tirer parti des méthodes statiques de type Monitor. C# utilise le mot clé lock, tandis que Visual Basic utilise le mot clé SyncLock.

    • AutoResetEvent Le thread principal de l'exemple attend sur un objet AutoResetEvent jusqu'à ce qu'il soit défini, ce qui indique que les dernières fonctions asynchrones ont terminé leur travail.

    • Interlocked L'exemple utilise la méthode statique Decrement pour accéder de façon asynchrone à une variable de compteur, afin d'indiquer le moment où AutoResetEvent doit être défini.

  • Thread

    • ThreadPool Lors de l'écriture du code managé, il est recommandé aux développeurs (chaque fois que cela est possible) d'utiliser la méthode QueueUserWorkItem pour implémenter les appels de la méthode asynchrone. Cet exemple utilise cette approche pour exécuter du code qui recherche une ressource logique.
  • Délégués

    • WaitCallback Utilisé pour créer une méthode de rappel de type sécurisé pour la classe ThreadPool à utiliser.

Voir aussi

Concepts

Pool de threads managés

Référence

Classe AutoResetEvent

Classe Delegate

Classe Interlocked

Classe Monitor

Espace de noms System.Threading

Classe Thread

Classe ThreadPool

Délégué ThreadStart

Délégué WaitCallback

Autres ressources

Threading managé

Fonctionnalités et objets de threading