Synchronisation d'attente, exemple de technologie

Mise à jour : novembre 2007

Cet exemple montre comment utiliser la classe WaitHandle pour une synchronisation de threads. Le type dérivé de WaitHandle Mutex est utilisé pour appliquer des règles d'accessibilité s'excluant mutuellement à un bloc de code protégé.

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 la 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 WaitSynchronizationCS.sln ou msbuild WaitSynchronizationVB.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 WaitSynchronizationCS.sln ou de WaitSynchronizationVB.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 nouveau fichier exécutable.

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

    Remarque :

    Cet exemple génère une application console. Vous devez la lancer à partir d'une fenêtre de console pour consulter sa sortie.

Notes

Cet exemple met en file d'attente jusqu'à cinq appels de méthode asynchrone. Chaque méthode attend ensuite la ressource, écrit dans la console, entre en phase de sommeil, puis écrit dans la console une deuxième fois.

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

  • Synchronisation des threads

    • Mutex Fournit une exclusion mutuelle pour la synchronisation de threads.

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

    • WaitHandle La classe WaitHandle constitue la classe de base à partir de laquelle les classes Mutex et AutoResetEvent (parmi d'autres) sont dérivées. Ce type implémente des méthodes permettant d'"attendre" que plusieurs types dérivés portent la valeur "Signalé".

    • 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.

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

Voir aussi

Concepts

Threads et threading

Référence

AutoResetEvent

Delegate

Interlocked

Mutex

System.Threading

ThreadPool

WaitCallback

WaitHandle

Autres ressources

Fonctionnalités et objets de threading