lock Anweisung in C#

Muhammad Maisam Abbas 16 Februar 2024
lock Anweisung in C#

In diesem Tutorial werden wir die Anweisung lock in C# diskutieren.

Die lock-Anweisung in C#

Die Anweisung lock(obj) gibt an, dass in C# nicht mehr als ein Thread gleichzeitig auf den folgenden Codeabschnitt zugreifen kann. Der Parameter obj in der Anweisung lock(obj) ist eine Instanz der Klasse object. Die Anweisung lock(obj) bietet eine effiziente Möglichkeit zum Verwalten von Threads in C#. Wenn ein Thread auf den Code in der lock(obj) zugreift und ein anderer Thread auf denselben Code zugreifen möchte, muss der zweite Thread warten, bis der erste Thread ihn ausführt. Die Anweisung lock(obj) stellt die sequentielle Ausführung des angegebenen Codeabschnitts sicher. Um dieses Phänomen zu demonstrieren, zeigen wir Ihnen zunächst das Ergebnis des Codes ohne Thread-Verwaltung mit der Anweisung lock(obj).

using System;
using System.Threading;

namespace lock_statement {
  class Program {
    static readonly object lockname = new object();
    static void display() {
      for (int a = 1; a <= 3; a++) {
        Console.WriteLine("The value to be printed is: {0}", a);
      }
    }
    static void Main(string[] args) {
      Thread firstthread = new Thread(display);
      Thread secondthread = new Thread(display);
      firstthread.Start();
      secondthread.Start();
    }
  }
}

Ausgabe:

The value to be printed is: 1
The value to be printed is: 1
The value to be printed is: 2
The value to be printed is: 3
The value to be printed is: 2
The value to be printed is: 3

Wie wir sehen können, greifen die Threads firstthread und secondthread zufällig auf den Code innerhalb der Schleife zu. Wir zeigen Ihnen das Ergebnis des Codes mit Thread-Management mit der Anweisung lock(obj).

using System;
using System.Threading;

namespace lock_statement {
  class Program {
    static readonly object lockname = new object();
    static void display() {
      lock (lockname) {
        for (int a = 1; a <= 3; a++) {
          Console.WriteLine("The value to be printed is: {0}", a);
        }
      }
    }
    static void Main(string[] args) {
      Thread firstthread = new Thread(display);
      Thread secondthread = new Thread(display);
      firstthread.Start();
      secondthread.Start();
    }
  }
}

Ausgabe:

The value to be printed is: 1
The value to be printed is: 2
The value to be printed is: 3
The value to be printed is: 1
The value to be printed is: 2
The value to be printed is: 3

Diesmal wird nacheinander sowohl auf firstthread als auch auf secondthread auf den Code innerhalb der Schleife zugegriffen. Wir können Code, in dem wir den Wert einer Variablen ändern, in eine Anweisung lock(obj) einfügen, um Datenverlust zu vermeiden.

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

Verwandter Artikel - Csharp Thread