Synchronisation des données pour le multithreading

Guide du développeur .NET Framework 
Synchronisation des données pour le multithreading 

Lorsque plusieurs threads peuvent effectuer des appels aux propriétés et aux méthodes d'un objet unique, il est critique que ces appels soient synchronisés. Sinon, un thread peut interrompre l'action d'un autre thread et l'objet peut se retrouver dans un état non valide. Une classe dont les membres sont protégés de ces interruptions s'appelle thread-safe.

L'infrastructure du langage commun (CLI, Common Language Infrastructure) fournit plusieurs stratégies pour synchroniser l'accès aux membres static et d'instance :

Le Common Language Runtime fournit un modèle de thread où les classes appartiennent à un nombre de catégories qui peuvent être synchronisées de diverses manières en fonction des exigences. Le tableau suivant répertorie le type de prise en charge disponible en matière de synchronisation pour des champs et des méthodes pour une catégorie de synchronisation donnée.

 
Catégorie Champs globaux Champs statiques Méthodes statiques Champs d'instance Méthodes d'instance Blocs de code spécifique

Pas de synchronisation

Non

Non

Non

Non

Non

Non

Contexte synchronisé

Non

Non

Non

Oui

Oui

Non

Régions de code synchronisées

Non

Non

Seulement si marqué

Non

Seulement si marqué

Seulement si marqué

Synchronisation manuelle

Manuelle

Manuelle

Manuelle

Manuelle

Manuelle

Manuelle

Pas de synchronisation

Il s'agit du paramètre par défaut pour les objets. Tout thread peut accéder à n'importe quelle méthode ou champ à tout moment. Un seul thread à la fois peut accéder à ces objets.

Synchronisation manuelle

La bibliothèque de classes du .NET Framework fournit plusieurs classes permettant de synchroniser des threads. Consultez Vue d'ensemble des primitives de synchronisation.

Régions de code synchronisées

Vous pouvez utiliser la classe Monitor ou un mot clé du compilateur pour synchroniser des blocs de code, des méthodes d'instance et des méthodes statiques. Il n'existe pas de prise en charge pour les champs statiques synchronisés.

Visual Basic et C# prennent en charge le marquage de blocs de code à l'aide d'un mot clé de langage particulier. Le code résultant qui est généré tente de prendre le verrou lors de l'exécution du code. Si le verrou est déjà pris, le code en exécution attend que le verrou soit disponible. Lorsque le code quitte le bloc synchronisé de code, le verrou est libéré. Vous pouvez également décorer une méthode à l'aide de MethodImplAttribute et MethodImplOptions.Synchronized, ce qui revient essentiellement à utiliser Monitor ou l'un des mots clés du compilateur pour un bloc de code Monitor.

Thread.Interrupt peut s'utiliser pour libérer un thread des opérations de blocage telles que le fait d'attendre l'accès à une région synchronisée du code. Thread.Interrupt s'utilise également pour libérer des threads d'opérations telles que Thread.Sleep.

RemarqueImportant

N'utilisez pas la classe pour verrouiller des méthodes static (Shared en Visual Basic). Utilisez à la place un objet de niveau classe privée. De la même façon, n'utilisez pas this en C# (Me en Visual Basic) pour verrouiller des méthodes d'instance. Utilisez à la place un objet privé. Une classe ou une instance peut être verrouillée par du code autre que le vôtre, ce qui peut provoquer des blocages ou des problèmes de performance.

Prise en charge par le compilateur

Visual Basic et C# prennent en charge un mot clé de langage qui utilise Monitor.Enter et Monitor.Exit pour verrouiller l'objet. Visual Basic prend en charge l'instruction SyncLock ; C# prend en charge l'instruction lock.

Dans les deux cas, si une exception est levée dans le bloc de code, le verrou acquis par lock ou SyncLock est libéré automatiquement. Les compilateurs C# et Visual Basic émettent un bloc try/finally à l'aide de Monitor.Enter au début de la tentative, et Monitor.Exit dans le bloc finally. Si une exception est levée à l'intérieur du bloc lock ou SyncLock, le gestionnaire finally s'exécute pour vous permettre d'effectuer tout travail de nettoyage.

Contexte synchronisé

Vous pouvez utiliser SynchronizationAttribute sur n'importe quel ContextBoundObject pour synchroniser tous les champs et méthodes d'instance. Tous les objets dans le même domaine de contexte partagent le même verrou. Plusieurs threads sont autorisés à accéder aux méthodes et aux champs, toutefois un seul thread à la fois est autorisé.

Voir aussi


Ces informations proviennent du site de http://msdn2.microsoft.com
Source de cette page : http://msdn2.microsoft.com/fr-fr/library/z8chs7ft.aspx

Réseaux sociaux

Vous pouvez modifier vos préférences dans votre profil pour ne plus afficher les interactions avec les réseaux sociaux sur ces pages.

 

Nuage de mots clés

8 mots clés dont 0 définis manuellement (plus d'information...).

Avertissement

Cette page ne possède pas encore de mots clés manuels, ceci est donc un exemple automatique (les niveaux de pertinence sont fictifs, mais les liens sont valables). Pour tester le nuage avec une page qui contient des mots définis manuellement, vous pouvez cliquer ici.

Vous pouvez modifier vos préférences dans votre profil pour ne plus afficher le nuage de mots clés.

 

Astuce pour imprimer les couleurs des cellules de tableaux : http://www.gaudry.be/ast-rf-450.html
Aucun commentaire pour cette page

© Ce document issu de l′infobrol est enregistré sous le certificat Cyber PrInterDeposit Digital Numbertection. Enregistrement IDDN n° 5329-4561
Document créé le 29/10/06 23:15, dernière modification le Vendredi 17 Juin 2011, 12:11
Source du document imprimé : http://www.gaudry.be/dotnet-rf-z8chs7ft.html Document affiché 1 fois ce mois de Juin.
St.Gaudry©07.01.02
Outils (masquer)
||
Recherche (afficher)
Recherche :

Utilisateur (masquer)
Navigation (masquer)
Apparence (afficher)
Stats (afficher)
15832 documents
452 astuces.
549 niouzes.
3099 definitions.
447 membres.
8115 messages.

Document genere en :
0,63 seconde

Mises à jour :
Mises à jour du site
Citation (masquer)
Il n'y a qu'une chose qui puisse rendre un rêve impossible, c'est la peur d'échouer.

Paulo Coelho [Extrait de L'alchimiste]
 
l'infobrol
Nous sommes le Vendredi 01 Juin 2012, 05:58, toutes les heures sont au format GMT+1.00 Heure, heure d'été (+1)