C# Mutex

C# Mutex
In der C# -Programmierung können wir die Mutex -Klasse verwenden, um zwischen zwei Threads zu synchronisieren. Es funktioniert wie ein Schloss. Es verhindert, dass zwei Themen ein oder mehrere Handlungen gleichzeitig ausführen. Mutex funktioniert über viele Prozesse hinweg. Es gibt Waitone () und auch releasemutex () -Methoden. Die WaitOne () -Methode wird zum Sperren der Ressource verwendet, und die methode releasemutex () wird hier zum Entsperren der Ressource vorhanden. Es ist nützlich, wenn wir mit einem Multi-Rahmen-Projekt oder einem Projekt arbeiten, bei dem mehrere Aufgaben erstellt werden. Wir sollten dies verwenden, wenn wir versuchen, andere Aufgaben oder Threads zu sperren, die die Ressource nicht verwenden können, während die andere Aufgabe oder das andere Thread diese Ressource verwendet.

Hier in diesem Handbuch erklären wir Ihnen, wie wir die Mutex -Klasse in C# -Programmierung verwenden. Wir geben verschiedene Beispiele für die Verwendung dieser mutex () -Klasse in unserem C# -Programm an. Wir führen die angegebenen Beispiele in Ubuntu 20 durch.04.

Beispiel 1

Wir werden ein Beispiel unter Verwendung dieser mutex () Klasse ausführen. Da verwenden wir die Ubuntu 20.04 Für die Durchführung dieser Beispiele müssen wir den Texteditor dieses Ubuntu 20 öffnen.04 und erstellen Sie dann eine Datei mit einem beliebigen Namen unserer Wahl und speichern Sie diese Datei mit der Dateierweiterung von “.CS ”. Geben Sie dann den folgenden Code in diese Datei ein. Wir erläutern auch jede Zeile dieses angegebenen Programms im Folgenden im Detail.

Die erste Zeile dieses C# -Codes ist „System verwenden“, eine Bibliothek und durch die Verwendung dieser Bibliothek können wir verschiedene Klassen und Funktionen unseres C# -Coders erhalten. Wir erhalten die Funktion „Konsole“ und „Writeline“ -Funktion mit dieser Bibliothek. Das Schlüsselwort "Verwenden" wird zum Empfangen von Parametern verwendet. Das System. Threading ”ist hier, um Aufgaben zu generieren und Objekte aus der Klasse zu empfangen. Jetzt werden wir den Namespace mit dem Namen "Demomutex" importieren. Wir haben auch eine Klasse namens "Programm" erstellt. Wir erstellen eine Instanz namens "Mutex", die "neu" mutex () "entspricht". Das „Neue“ ist ein Schlüsselwort zum Erstellen einer neuen Instanz.

Rufen Sie dann die Funktion „Haupt“ in unserem C# -Code auf. In dieser "Haupt" -Funktion haben wir eine "für" Schleife, mit der fünf verschiedene Threads erstellt werden können. Da diese Schleife "A" mit "1" initialisiert, lautet die Bedingung hier "a"<=5” which means there are 5 iterations in the loop or the loop iterates 5 times and creacreatestiple threads. Each time the value of “a” increments when the loop executes and the condition is true. Then we create a Thread object with the name “threadObj” by using the “new” keyword. When this loop executes, it creates an object of the Thread. Now, we give the “name” to the “threadobj” which is equal to the value of “a”. It will store the name as “Thread” + a means the “Thread” and the value of “a” that “a” depends on the value of the loop iteration.

Dann haben wir „ThreadObj.Start () ”“, in dem „start ()“ verwendet wird, um den Zustand des „Threadobj“ in den Laufstatus zu ändern. Außerhalb dieser "für" Schleife haben wir "Konsole".Schlüssel einlesen()". Dies wird zum Warten auf einen Schlüsselpress verwendet. Darunter haben wir eine Methode mit dem Namen "Demomutex", der "statisch" ist. Wir verwenden diese Methode zur Implementierung der Synchronisation unter Verwendung des „Mutex“. Die „Konsole.WriteLine ”ist hier, um die darin geschriebene Aussage zu drucken. Nach dieser Konsole.Writeline ”-Anweisung, wir werden die„ Try “-Methode verwenden.

Andererseits haben wir die „Konsole.Schreibeline ”Aussage. Wenn Sie die Ausgabe sehen, wird Ihnen klar sein, wie diese „Konsole“.Writeline ”druckt die angegebene Erklärung aus. Der Faden.Sleep (2000) ”ist für eine Zeit, die hier als Parameter angegeben wird. Danach verwenden wir wieder die „Konsole“.Schreibeline ”Aussage. Wir verwenden das Schlüsselwort „Schlüsselwort“ des Schlüsselworts, um die Ressourcen zu reinigen, die wir im Try -Block oder die Anweisung in diesem „endgültigen“ Block zuordnen, der ausgeführt wird, wenn die Anweisung die Kontrolle über die Steuerung verlässt. In der Anweisung „Endlich“ werden wir die Methode „releasemutex“ aufrufen, die zum Entblockieren verwendet wird, damit ein anderer Thread die Ausführung startet, die auszuführen ist.

Wir geben auch die Ausgabe dieses Code im Bild unten an. Sie können sehen, wie dieser Code die Ausgabe auf dem Bildschirm angibt. Wir kompilieren unseren Code mit diesem Befehl und wenn der Code fehlerfrei ist, erstellt er eine EXE-Datei für uns. Diese "EXE" -Datei wird dann mit dem Befehl "mono" ausgeführt. Und denken Sie daran, dass wir, wenn wir diesen Befehl „Mono“ verwenden, das verwenden müssen.Exe ”Dateierweiterung mit dem Dateinamen und dann diesen Befehl ausführen, um die Ausgabe abzurufen.

In dieser Ausgabe können Sie sehen, dass die anderen Threads auch eingeben möchten, wenn ein Thread den kritischen Abschnitt eingeben möchte, aber bis zum ersten Thread die Ausführung abgeschlossen hat, da wir die Funktion mutex "waitone ()" verwenden. Wenn dieser Thread seine Ausführung abschließt, tritt der nächste Thread ein, startet seine Ausführung und existiert nach Abschluss seiner Aufgabe. Damit kann der nächste Thread die Ausführung eingeben und beginnen. Die gleichen Schritte werden wiederholt, bis die Bedingung wahr ist.

Beispiel # 2

Hier haben wir eine weitere Illustration mit der mutex () -Methode. Versuchen wir dieses Beispiel, um dieses Konzept zu verstehen.

Die gleichen Aussagen, die in diesem C# Code verwendet werden, sind "System verwenden" und "System".Fäden “. Die Klasse ist "MutexProgram" und in der Klasse haben wir eine Instanz der Mutex -Klasse mit dem Namen "Mutex" erstellt, indem wir das Schlüsselwort "neu" verwenden und dann die Funktion „Haupt“ unten aufrufen. Die Waitone () -Methode versucht, ein Schloss zu erhalten. Wenn der Mutex nicht verfügbar ist, blockiert „Waitone ()“ und wartet, bis er verfügbar ist. Wir geben hier auch ein Zeitlimit an. Wenn wir die Waitone () -Methode auf dem „Mutex -Objekt“ nennen und die Zeitlimit vergeht. Wenn es false zurückgibt, wird die unten geschriebene Erklärung ausgeführt: die „Konsole“.Schreibeline ”Aussage. Und diese Aussage wird zum Drucken verwendet.

Wenn wir wahr werden, gehen wir zum ausgestatteten Codeabschnitt, der die Funktion „run ()“ ist, und diese Funktion ist unten definiert. Wenn "run ()" endet, wird der Block "Endlich" ausgeführt, wodurch der Mutex mit "mutexrelease" veröffentlicht wird. Wir erklären diese „Mutexrelease“ im vorherigen Code. Wir definieren die Funktion „run ()“ hier, in der wir eine Anweisung mit "Konsole" drucken werden.WriteLine () “und endlich haben wir die„ Konsole.Zeile lesen()". Diese „Konsole.Readline ”ist hier zum Lesen kompletter Saiten, bis die Eingabetaste gedrückt wird.

Die Ausgabe zeigt nur die Anweisungen „run ()“, da sie True zurückgibt und zum „run ()“ wechselt. Wenn wir dies gleichzeitig auf dem anderen Terminal ausführen, wird auf dem anderen Terminal die Erklärung angezeigt, die in der IF -Anweisung geschrieben ist, wenn es versucht, den „Mutex“ zu erhalten, aber der „Mutex“ ist bereits in der Verwendung einer anderen Anwendung verwendet Es muss also warten, bis der „Mutex“ veröffentlicht wird.

Abschluss

In diesem Tutorial werden die "Mutex" in der C# -Programmierung untersucht. Wir demonstrieren hier zwei Beispiele und verwenden diesen „Mutex“, damit Sie dieses Konzept verstehen werden. Diese "Mutex" -Klasse bietet uns "Waitone ()" und "Realeasemutex ()" -Funktionen. Dieser „Waitone ()“ wird zum Sperren verwendet, und der „releasemutex ()“ wird zum Entsperren der Aufgabe oder des Threads verwendet. Wir verwenden beide Methoden in unseren Beispielen und erläutern all dies ausführlich. Ich hoffe, Sie lernen dieses „Mutex“ -Konzept nach einer gründlichen Untersuchung dieses Leitfadens und können diese „Mutex“ -Klasse in Ihrem Projekt verwenden.