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.
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