Sobes.tech
Middle

Was sind Lock-ers in C#?

sobes.tech KI

Antwort von AI

lock in C# wird verwendet, um exklusiven Zugriff auf einen Codeblock zu gewährleisten. Es stellt sicher, dass nur ein Thread diesen Block gleichzeitig ausführen kann, um Race Conditions bei der Arbeit mit gemeinsam genutzten Ressourcen zu vermeiden.

private static readonly object _lockObject = new object(); // Objekt zur Synchronisation

public void AccessSharedResource()
{
    lock (_lockObject) // Objekt sperren
    {
        // Kritischer Abschnitt: Code, der exklusiven Zugriff erfordert
        // Arbeit mit gemeinsam genutzter Ressource (z.B. Variablenänderung)
    } // Sperre wird beim Verlassen des Blocks automatisch freigegeben
}

Alternativen und verwandte Konzepte:

  • Monitor: Bietet eine granularere Kontrolle über die Synchronisation, inklusive Methoden wie Wait, Pulse, PulseAll.
  • Mutex: Wird für die Synchronisation zwischen Prozessen sowie zwischen Threads innerhalb eines Prozesses verwendet.
  • Semaphore/SemaphoreSlim: Begrenzen die Anzahl der Threads, die gleichzeitig auf eine Ressource zugreifen können.
  • ReaderWriterLockSlim: Ermöglicht mehreren Threads gleichzeitig zu lesen, aber nur einem zu schreiben.

Die Wahl des Sperrmechanismus hängt von der spezifischen Synchronisationsaufgabe ab. lock ist eine Kurzform für die Verwendung von Monitor.Enter und Monitor.Exit und eignet sich für die meisten einfachen Synchronisationsfälle innerhalb eines Prozesses.