C-Programmierung

Posix Mutex mit C-Programmierung

Posix Mutex mit C-Programmierung
Der heutige Artikel konzentriert sich auf die Verwendung von Posix Mutex mit C-Programmierung in Linux Mint 20. Bevor wir jedoch zu unserem Hauptbeispiel übergehen, möchten wir zunächst einige Terminologien klären, damit Sie das Beispielszenario, das wir mit Ihnen teilen werden, leicht verstehen können. In Betriebssystemen wird das Konzept des Threadings häufig verwendet. Threads sind im Grunde Teilprozesse, die mit unterschiedlichen Aufgaben delegiert werden. Sie können das folgende Beispiel betrachten, um die Funktionsweise von Threads zu verstehen.

Angenommen, es gibt einen Haupt-Thread A, dessen Aufgabe es ist, die Summe der Variablen w und y mit w=x+1 und y=z+2 . zu berechnen. Die Werte der Variablen x und z sind vom Benutzer abzurufen. In diesem Szenario können wir zwei Threads erstellen, B und C. Die Aufgabe von Thread B besteht darin, den Wert der Variablen x vom Benutzer zu übernehmen, ihn um 1 zu erhöhen und in der Variablen w zu speichern. Die Aufgabe von Thread C besteht darin, den Wert der Variablen z vom Benutzer zu nehmen, ihn um 2 zu erhöhen und ihn dann in der Variablen y . zu speichern. Schließlich übergeben diese beiden Threads diese Ergebnisse an den Haupt-Thread A, der dann ihre Summe berechnet und das Endergebnis anzeigt.

Hätten wir in diesem Szenario keine Threads erstellt, wären alle Aufgaben in viel längerer Zeit vom Hauptthread A erledigt worden. Auf diese Weise können Threads Ihre Berechnungen effizient und ohne unnötige Verzögerungen durchführen. Es gibt jedoch ein sehr großes Problem mit der Verwendung von Threads, die als "Race Condition" bekannt ist. Es ist eine Situation, in der zwei Threads versuchen, auf dieselben Daten zuzugreifen und sie zu ändern, wodurch sie inkonsistent bleiben. Als Programmierer sollte es unser Ziel sein, Race-Conditions auf die anmutigste Weise zu vermeiden.

Die am häufigsten verwendete Lösung zur Vermeidung von Race-Conditions ist die Verwendung von Mutex. Mutex steht für gegenseitigen Ausschluss und bietet uns im Grunde einen Sperrmechanismus, der den Zugriff und die Änderung der kritischen Daten durch mehr als einen Benutzer gleichzeitig verhindert at. Auf diese Weise wird die Datenkonsistenz sichergestellt. Posix ist im Grunde eine Bibliothek, die uns verschiedene eingebaute Funktionen präsentiert, die die Implementierung von Threads und Mutex viel einfacher machen. Mit dem folgenden Beispiel werden wir versuchen, die Verwendung von Posix Mutex mit C-Programmierung in Linux Mint 20 . zu lernen.

Beispiel für die Verwendung von Posix Mutex mit C-Programmierung in Linux Mint 20

Wir führen die folgenden drei Schritte durch, um Sie durch die Verwendung von Posix Mutex mit C-Programmierung in Linux Mint 20 . zu führen.

Schritt 1: Erstellen eines Programms, das die Verwendung von Posix Mutex mit der C-Programmierung in Linux Mint 20 demonstriert

Als erstes erstellen wir ein .cpp-Datei auf unserem Linux Mint 20-System. Wir gehen einfach zu unserem Home-Ordner, erstellen ein leeres Dokument und nennen es Mutex.cpp. Einmal unser .cpp-Datei erstellt wird, öffnen wir sie mit dem Texteditor. Danach geben wir den in den Bildern unten gezeigten Code in unser .cpp-Datei:

Der in den beiden obigen Bildern gezeigte Code hat zwei verschiedene Threads erstellt. Der erste Thread entspricht Job #1, während der zweite Thread Job #2 entspricht. Dann haben wir eine Beispielfunktion namens „Mutex Function“ erstellt. In dieser Funktion sperren wir zuerst die Mutex-Sperrvariable und sie wird erst entsperrt, wenn Thread #1 Job #1 beendet hat. In ähnlicher Weise wird die Mutex-Sperrvariable erneut von Thread #2 gesperrt, bis Job #2 abgeschlossen ist. Diese „Mutex-Funktion“ wird von der „main“-Funktion aufgerufen.

Schritt #2: Kompilieren des C-Programms in Linux Mint 20

Nach dem Speichern .cpp-Datei, wir werden sie nun über das Linux Mint 20-Terminal mit dem folgenden Befehl kompilieren:

$ gcc -o Mutex Mutex.cpp -pthread

Hier bezieht sich „Mutex“ nach dem „-o“-Flag auf den Namen der zu erstellenden Objektdatei, während „Mutex“.cpp“ ist der Name des Originals .cpp-Datei. Das Flag „-pthread“ ist zum Kompilieren dieses Programms erforderlich, da dieses Programm unter Verwendung der Bibliothek „pthread“ geschrieben wird. Wenn Sie dieses Flag weglassen, wird Ihr Programm nicht kompiliert und gibt einige Fehler aus. Die gelungene Zusammenstellung unserer .cpp-Datei erzeugt keine Nachrichten auf dem Terminal, wie in der Abbildung unten gezeigt:

Schritt #3: Ausführen des C-Programms in Linux Mint 20

Sobald die Objektdatei mit dem Namen „Mutex“ erstellt wurde, können wir sie mit dem folgenden Befehl ausführen:

$ ./Mutex

In der Ausgabe unseres Mutex.cpp-Programm werden Sie feststellen, dass der erste Job 1 gestartet wurde, was bedeutet, dass Thread #1 die Mutex-Sperre erhalten hat acquired. Danach ist Job 1 nach einiger Zeit fertig. Dann startet Job 2, was bedeutet, dass Thread #2 die Mutex-Sperre erhalten hat. Es wird erst freigeschaltet, wenn Job 2 beendet ist.

Fazit

Dieser Artikel enthält eine ausführliche Erklärung der Verwendung von Posix Mutex mit der C-Programmierung in Linux Mint 20. Der Mutex kann sehr effektiv verwendet werden, um die Race-Conditions beim Programmieren zu vermeiden, indem einfach die Posix- oder pthread-Bibliothek in unseren C-Code aufgenommen wird. Dadurch wird nicht nur die Datenkonsistenz sichergestellt, sondern auch die Verarbeitung deutlich effizienter.

Das Beste an der Verwendung der Posix-Bibliothek unter Linux ist, dass wir dafür nicht einmal spezielle Software, Pakete oder Compiler installieren müssen. Der C-Code kann einfach in jedem Standard-Texteditor unter Linux geschrieben und mit den Standard-Gcc- oder G++-Compilern kompiliert und ausgeführt werden. Dies erweist sich als zusätzliche Leichtigkeit und Bequemlichkeit bei der Verwendung von Posix Mutex mit C-Programmierung in Linux Mint 20.

Beste Befehlszeilenspiele für Linux
Die Befehlszeile ist nicht nur Ihr größter Verbündeter bei der Verwendung von Linux – sie kann auch eine Quelle der Unterhaltung sein, da Sie damit vi...
Beste Gamepad-Mapping-Apps für Linux
Wenn du Spiele unter Linux gerne mit einem Gamepad statt mit einem typischen Tastatur- und Maus-Eingabesystem spielst, gibt es einige nützliche Apps f...
Nützliche Tools für Linux-Spieler
Wenn Sie gerne unter Linux spielen, haben Sie wahrscheinlich Apps und Dienstprogramme wie Wine, Lutris und OBS Studio verwendet, um das Spielerlebnis ...