Maison > développement back-end > C++ > Comment l'instruction C# `lock` fonctionne-t-elle sous le capot ?

Comment l'instruction C# `lock` fonctionne-t-elle sous le capot ?

Mary-Kate Olsen
Libérer: 2025-01-15 09:54:44
original
488 Les gens l'ont consulté

How Does the C# `lock` Statement Work Under the Hood?

Plongez dans le fonctionnement interne de la lock déclaration

Les développeurs utilisent souvent l'instruction lock pour protéger l'exécution du code lorsqu'ils traitent des objets non thread-safe. Mais que se passe-t-il exactement sous le capot lorsque plusieurs threads interagissent avec ce code protégé ?

Approfondissement : suivi de l'exécution des lock déclarations

En C# 3.0, l'instruction lock se traduit par le code suivant :

<code class="language-C#">var temp = obj;
Monitor.Enter(temp);
try
{
    // 非线程安全代码
}
finally
{
    Monitor.Exit(temp);
}</code>
Copier après la connexion

En C# 4.0, ce processus a été modifié et le code généré est le suivant :

<code class="language-C#">bool lockWasTaken = false;
var temp = obj;
try
{
    Monitor.Enter(temp, ref lockWasTaken);
    // 非线程安全代码
}
finally
{
    if (lockWasTaken)
    {
        Monitor.Exit(temp); 
    }
}</code>
Copier après la connexion

Monitor.EnterFonction

Monitor.Enter joue un rôle essentiel dans la fonctionnalité de la déclaration lock. MSDN décrit son fonctionnement comme suit :

" Utilisez Enter pour récupérer le Monitor de l'objet passé en argument. Si un autre thread a déjà exécuté un Enter pour l'objet mais n'a pas encore exécuté le Exit correspondant, le thread actuel bloquera jusqu'à ce qu'un autre Le fil libère l'objet »

Essentiellement, Monitor.Enter garantit un accès exclusif à l'objet. Si un autre thread tente d'acquérir le même verrou, il sera suspendu jusqu'à ce que le verrou soit libéré. Plusieurs appels à Enter depuis le même thread ne provoqueront pas de blocage, mais nécessiteront le même nombre d'appels Exit pour déverrouiller l'objet et permettre au thread en attente de reprendre l'exécution.

Temps d'attente infini

Il est à noter que Monitor.Enter attendra indéfiniment que le verrou soit disponible. Contrairement à certains mécanismes de verrouillage, il n’impose pas de délai d’attente.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal