Beispiel Nr. 01: Ohne Sperrenkonstrukt
Beginnen wir mit dem ersten Beispiel dieses Artikels für die Verriegelungsnutzung in C#. Wir müssen also zuerst eine C# -Codestruktur erstellen. Ohne die C# Standard -Codestruktur funktioniert unser Code nicht. Daher müssen Sie es mit der Verwendung der "System" -Bibliothek starten, die durch das Schlüsselwort "Verwenden" im Code angegeben ist. Da wir an Threads arbeiten müssen, müssen wir den Threading -Namespace der Systembibliothek über das Schlüsselwort „Verwenden“ angeben.
Beide Bibliotheken sind in unseren Beispielen in diesem Artikel für die Implementierung von Lock und Threads erforderlich. Danach haben wir eine einfache "Test" im C# Code initialisiert. Sie können auch einen Namespace vor der Klasse definieren, aber hier ist er nicht erforderlich. Die Klasse „Test“ enthält insgesamt 2 Funktionen. Einer ist eine benutzerdefinierte Funktion namens "show ()" und die andere ist die main () -Funktion von c#, die auch eine Funktion des Executors in C# -Codes ist. Der Ausführungsprozess beginnt mit der Main () -Methode dieses Programms. Wir haben die "Thread" -Klasse des "Threading" -Namenspace für die Erstellung von zwei neuen Thread -Objekten T1 und T1 mit Hilfe eines "neuen" Keywords verwendet.
In der Thread -Erstellung haben wir die Funktion „Show“ in den Argumenten von „Thread“ verwendet, um sie zu einer Thread -Funktion zu machen. Wie wir 2 Threads erstellt haben, wird die Funktion show () zweimal im Code als Thread 1 bzw. Thread 2 verwendet. Dies ist nur eine Thread -Erstellung und nicht eine Ausführung. Um den Thread auszuführen, müssen wir die Funktion „Start“ aus dem Threading -Klasse -Namespace verwenden. Daher wurde das Objekt "T1" von Thread 1 verwendet, um die Funktion "Start" aufzurufen, um die Thread -Funktion "anzeigen" auszuführen. Nach dem ersten Thread führt der zweite Thread T2 die Methode "anzeigen" mit derselben Startfunktion aus. Wenn nun ein Thread gestartet wurde. Bis die Schleife ausgeführt wird, wird sie weiterhin seine „Konsole ausführen.WRITELELE () ”Funktion Anweisung zur Anzeige der Iterationsnummer mit der Iterationsvariablen„ I “. Nach jeder Iteration erhält der Faden einen Schlaf von 3 Sekunden, indem die Funktion „Schlaf“ von C# hier verwendet wird. Das gleiche wird wiederholt, wenn ein zweiter Thread beginnt. Da wir nun Threads verwendet haben, um die Funktion „Show“ auszuführen, ist es nicht sicher, ob sie sie auf eine Weise ausführen wird, wo . Thread 1 zuerst und dann Faden 2. Sparen wir unseren Code, um das Ergebnis zu sehen.
Wir brauchen C# Compiler und Laufzeitbefehle, um unsere Codes zu kompilieren und auszuführen. Wir haben bereits beide installiert. Somit haben wir den als C# Compiler verwendeten Befehl c# "mcs" verwendet, um diesen neu erstellten Code zu kompilieren. Die Kompilierung gibt nichts zurück, aber erzeugt eine neue "EXE" -Datei in demselben aktuellen Ordner i.e. erfolgreich.
Wir haben also diese "EXE" -Datei für den C# -Code mit dem "Mono" -Fotterbefehl des C# ausgeführt. Da beide Threads in der Funktion main () begonnen wurden. Dies bedeutet, dass ein Thread die Ressourcen aus dem anderen Thread nahm, während der erste seine Ausführung nicht einmal vollständig abgeschlossen hat. Dies kann auch Deadlock verursachen.
Beispiel Nr. 02: Mit dem Sperrenkonstrukt
Um zu verhindern, dass die Threads gleichzeitig ausgeführt werden, während die Ressourcen gemeinsam genutzt oder angefordert werden, müssen wir das "Sperren" -Konstrukt im C# -Code verwenden. Das Sperrkonstrukt wird sicherstellen. Dies kann auf die Prioritätsregel funktionieren oder . Wer zuerst kommt, mahlt zuerst. Um das Konstrukt „Sperre“ zu verwenden, müssen wir ein Objekt für die Sperre mit der "Objekt" -Klasse von C# erstellen.
Dieses Objekt muss von statischer schreibgeschützter Typ sein. Sie können es alles nennen, was Sie sich wünschen. Die Erstellung eines Schlossobjekts versichert, dass ein Schloss erstellt und nicht auf einige Teile des Codes angewendet wird. Wir haben es "Stopp" genannt. Jetzt müssen wir ein Konstrukt mit seinem Schlüsselwort "Sperre" erstellen und den Sperrnamen in seinen Argumenten als "Stopp" in der Funktion "Show" angeben. Da die Funktion show () unser Thread ist, müssen wir ihre Implementierung in das "Sperren" -Konstrukt (i "einsetzen.e. Der Code, auf den wir den Zugriff beschränken möchten.) Jetzt ist unser Code fertig, da die Sperre auf das Code -Stück innerhalb der Thread -Funktion angewendet wurde. Speichern Sie diesen aktualisierten Code und führen Sie ihn aus, um das Ergebnis zu sehen.
Wir haben diesen aktualisierten Code in unserem Ubuntu -Terminal zusammengestellt und danach seine "EXE" -Datei ausgeführt. Diesmal wurde die gesamte "Show" -Funktion vollständig ausgeführt (ich.e. Die Schleife "für" ist abgeschlossen.) Dies liegt daran, dass beide Male, in denen ein Thread mit der Funktion „Start“ gestartet wird, das Konstrukt "Stop" -Schress den Funktionscode show () bis zum ersten Thread seine Ausführung abgeschlossen hat. Danach fand dies ebenfalls 2. Daher ist unsere Ausgabe glatt.
Die ober-verderbliche Ausgabe wird ohne Pause und in einer Sekunde auf Ihrem Bildschirm angezeigt. Auf diese Weise können Sie nicht sehen. Aktualisieren wir die Funktion „Show“ im selben Code und fügen Sie die Schlaffunktion hinzu, die nach der Ausführung der Konsole 2 Sekunden Schlaf nimmt.Writeline () Funktionserklärung während der Iteration. Speichern Sie diesen Code mit Strg+S, schließen Sie die Datei und öffnen Sie die Shell.
Nach dem Kompilieren der Codedatei haben wir seine "EXE" -Datei auf der Shell ausgeführt. Der Code beginnt seine Threads auszuführen. Der erste Thread „Show“ begann, während er 2 Sekunden lang nach jeder Iteration geschlafen hat, wie unten gezeigt.
Nachdem der erste Thread „Show“ seine Ausführung abgeschlossen hat, hat das Sperre den Zugriff auf die Showfunktion veröffentlicht und Thread 2 wurde für die Ausführung erfasst.
Abschluss:
Dieser Artikel enthält Details zum Sperrenkonstrukt in C#. Wir haben unser erstes Beispiel ohne das „Sperren“ -Konstrukt besprochen und eine Ausgabe mit der zufälligen und ungeordneten Ausführung einer Threadfunktion erhalten. Wir haben auch die Ursachen dieser ungeordneten Ausführung des Threads besprochen. Danach diskutierten wir ein Beispiel mit der Verwendung des „Sperren“ -Konstrukts und erhielten eine Ausgabe mit einer zufälligen Art der Thread -Ausführung.