Synchronisation lecteur-writer, exemple de technologie
Mise à jour : novembre 2007
Cet exemple montre comment utiliser la classe de synchronisation de threads ReaderWriterLock. La fonctionnalité du type ReaderWriterLock permet au développeur d'écrire un code qui applique un accès exclusif à une ressource partagée lors de l'écriture ou de la modification de cette ressource par un thread, mais autorise un accès non exclusif lors de la lecture ou de la requête de la ressource.
Pour plus d'informations sur l'utilisation des exemples, consultez les rubriques suivantes :
Pour générer l'exemple à partir de l'invite de commandes :
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.
Tapez msbuild ReaderWriterSynchronizationCS.sln ou msbuild ReaderWriterSynchronizationVB.sln, selon votre choix de langage de programmation, à la ligne de commande.
Pour générer l'exemple à l'aide de Visual Studio :
Ouvrez l'Explorateur Windows et accédez à l'un des sous-répertoires spécifiques aux différents langages de l'exemple.
Double-cliquez sur l'icône de ReaderWriterSynchronizationCS.sln ou de ReaderWriterSynchronizationVB.sln, selon votre choix de langage de programmation, pour ouvrir le fichier dans Visual Studio.
Dans le menu Générer, cliquez sur Générer la solution.
Pour exécuter l'exemple
Accédez au répertoire qui contient le nouveau fichier exécutable.
Tapez ReaderWriter.exe à partir de la ligne de commande.
Remarque : Cet exemple génère une application console. Vous devez la lancer à partir de l'invite de commandes pour afficher sa sortie. Lorsque vous exécutez l'exemple, vous remarquerez que la sortie Écriture de Démarrage et Arrêt qui Écrivent de chaque writer se produit successivement. En effet, les writers possèdent un accès exclusif à la ressource, contrairement aux lecteurs.
Notes
Pour plus d'informations sur les threads et sur l'accès exclusif, consultez les commentaires figurant dans le code source et dans les fichiers build.proj.
Les éléments de la liste suivante décrivent brièvement les classes et les technologies utilisées par cet exemple :
- Synchronisation des threads
ReaderWriterLockUtilisé pour protéger une ressource logique implémentée comme un appel à Sleep. Les threads qui utilisent le type ReaderWriterLock peuvent maintenir un verrouillage de deux façons différentes. Un thread peut maintenir un verrouillage de lecture non exclusif qui permettra à d'autres threads de disposer d'un verrouillage de lecture pour la classe. Un thread peut également demander un verrouillage en écriture, exclusif et accordé uniquement lorsque les verrouillages actuels en lecture et en écriture sont libérés.
AutoResetEventLe thread principal de l'exemple attend qu'un objet AutoResetEvent soit défini, ce qui indique que les dernières fonctions asynchrones ont terminé leur travail.
InterlockedL'exemple utilise les méthodes statiques Interlocked.Increment et Interlocked.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.