Sobes.tech
Middle

Qu'est-ce que les lock-ers en C#?

sobes.tech IA

Réponse de l'IA

lock en C# est utilisé pour assurer un accès exclusif à un bloc de code. Il garantit qu'un seul thread peut exécuter ce bloc à la fois, évitant ainsi les conditions de course (race conditions) lors de la manipulation de ressources partagées.

private static readonly object _lockObject = new object(); // Objet pour la synchronisation

public void AccessSharedResource()
{
    lock (_lockObject) // Verrouillage de l'objet
    {
        // Section critique : code nécessitant un accès exclusif
        // Travail avec une ressource partagée (par exemple, modification d'une variable)
    } // Le verrouillage est libéré automatiquement à la sortie du bloc
}

Alternatives et concepts liés :

  • Monitor : Fournit un contrôle plus granulaire sur la synchronisation, y compris les méthodes Wait, Pulse, PulseAll.
  • Mutex : Utilisé pour la synchronisation entre processus, ainsi qu'entre threads dans un même processus.
  • Semaphore/SemaphoreSlim : Limite le nombre de threads pouvant accéder simultanément à une ressource.
  • ReaderWriterLockSlim : Permet à plusieurs threads de lire simultanément, mais à un seul d'écrire.

Le choix du mécanisme de verrouillage dépend de la tâche de synchronisation spécifique. lock est une forme abrégée d'utilisation de Monitor.Enter et Monitor.Exit, et convient à la plupart des cas simples de synchronisation au sein d'un même processus.