Heim > Backend-Entwicklung > C++ > Wie funktioniert die C#-Anweisung „lock' unter der Haube?

Wie funktioniert die C#-Anweisung „lock' unter der Haube?

Mary-Kate Olsen
Freigeben: 2025-01-15 09:54:44
Original
488 Leute haben es durchsucht

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

Tauchen Sie ein in das Innenleben der lock-Aussage

Entwickler verwenden häufig die lock-Anweisung, um die Codeausführung zu schützen, wenn sie mit nicht threadsicheren Objekten arbeiten. Aber was passiert genau unter der Haube, wenn mehrere Threads mit diesem geschützten Code interagieren?

Deep Dive: Verfolgung der Ausführung von lockAnweisungen

In C# 3.0 wird die lock-Anweisung in den folgenden Code übersetzt:

<code class="language-C#">var temp = obj;
Monitor.Enter(temp);
try
{
    // 非线程安全代码
}
finally
{
    Monitor.Exit(temp);
}</code>
Nach dem Login kopieren

In C# 4.0 wurde dieser Prozess geändert und der generierte Code lautet wie folgt:

<code class="language-C#">bool lockWasTaken = false;
var temp = obj;
try
{
    Monitor.Enter(temp, ref lockWasTaken);
    // 非线程安全代码
}
finally
{
    if (lockWasTaken)
    {
        Monitor.Exit(temp); 
    }
}</code>
Nach dem Login kopieren

Monitor.EnterFunktion

Monitor.Enter spielt eine entscheidende Rolle für die Funktionalität der lock-Anweisung. MSDN beschreibt seine Funktionsweise wie folgt:

" Verwenden Sie Enter, um das Monitor des als Argument übergebenen Objekts abzurufen. Wenn ein anderer Thread bereits ein Enter für das Objekt ausgeführt hat, aber das entsprechende Exit noch nicht ausgeführt hat, wird der aktuelle Thread blockiert bis ein anderer Der Thread gibt das Objekt frei ”

Im Wesentlichen garantiert Monitor.Enter den exklusiven Zugriff auf das Objekt. Wenn ein anderer Thread versucht, dieselbe Sperre zu erhalten, wird er angehalten, bis die Sperre aufgehoben wird. Mehrere Aufrufe von Enter aus demselben Thread führen nicht zu einer Blockierung, erfordern jedoch die gleiche Anzahl von Exit-Aufrufen, um das Objekt zu entsperren und dem wartenden Thread die Fortsetzung der Ausführung zu ermöglichen.

Unendliche Wartezeit

Es ist erwähnenswert, dass Monitor.Enter unbegrenzt darauf wartet, dass die Sperre verfügbar wird. Im Gegensatz zu einigen Sperrmechanismen wird kein Timeout erzwungen.

Das obige ist der detaillierte Inhalt vonWie funktioniert die C#-Anweisung „lock' unter der Haube?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage