C-Programmierung

POSIX-Semaphoren mit C-Programmierung

POSIX-Semaphoren mit C-Programmierung

POSIX bezieht sich auf das Portable Interface des Betriebssystems, das ein IEEE-Standard ist, der entwickelt wurde, um die Portabilität verschiedener Anwendungen zu unterstützen. POSIX ist ein Bestreben, eine gemeinsame standardisierte Version von UNIX durch eine Zusammenarbeit von Anbietern zu erstellen. Es würde die Portierung von Apps zwischen Hardwareplattformen erleichtern, wenn sie effektiv sind. Hewlett-Packard integriert POSIX in seine lizenzierte MPE/iX OS Version 5.0 und HP/UXX-Version 10.0 bzw. (sein UNIX).

Der POSIX-Standard hat viel mehr als zehn Teile, zwei sind jedoch leicht erhältlich. POSIX.1 beschreibt C-Programmierschnittstellen (i.e., eine Systemaufrufbibliothek) für Dateien, Prozeduren und E/A-Terminals. Die C-POSIX-Paketbibliothek für POSIX-Plattformen ist ein Framework der C-Standardbibliothek. Dies wird gleichzeitig mit dem Standard ANSI C . etabliert. Um POSIX mit Standard C konform zu machen, wurden mehrere Versuche unternommen. POSIX bietet zusätzliche Funktionen zu denen, die in Standard C . implementiert sind.

POSIX-Semaphoren

Ein Semaphor ist eine Datenstruktur, die häufig verwendet wird, um die Prozesse zu synchronisieren und Threads zu unterstützen, ohne dass ihre Interaktion miteinander zusammenarbeiten kann. Die Schnittstelle für Semaphoren ist durch den POSIX-Standard spezifiziert. Es ist nicht Teil von Pthreads. Die meisten UNIX-Systeme, die Pthreads unterstützen, stellen jedoch sogar Semaphoren zur Verfügung. In Unix-ähnlichen Frameworks wie Linux werden Semaphoren mit Message Queues und Common Memory unter den Interprocess Communication (IPC)-Diensten zusammengeführt merge. Die älteren Framework-V-Semaphoren und die modernen POSIX-Semaphoren werden zu zwei Arten von Semaphoren. POSIX-Semaphore-Aufrufe sind so viel einfacher als System-V-Semaphore-Aufrufe. Obwohl System-V-Semaphoren leichter zu bekommen sind, insbesondere auf früheren Unix-ähnlichen Plattformen. Es besteht die Notwendigkeit, Programme, die POSIX-Semaphoren verwenden, mit der Pthread-Bibliothek zu verbinden. Wir werfen einen Blick auf die POSIX-Semaphoren in diesem Artikel.

Warum POSIX-Semaphoren?

Es gibt ein großes Problem bei Threads, nämlich „Race Condition“. Es ist ein Umstand, in dem zwei Threads versuchen, die gleichen Informationen zu erhalten und zu ändern, wodurch sie widersprüchlich werden. Um eine Race Condition zu vermeiden, verwenden wir schon sehr lange Semaphoren.

Semaphoren sind in 2 Arten erhältlich:

Binäres Semaphor:

Es wird auch als Mutex-Sperre erkannt. Es hätte nur zwei mögliche Werte, 0 und 1. Der Wert wird als 1 . initialisiert. Es wird verwendet, um zahlreiche Prozesse durchzusetzen, um das schwerwiegende Abschnittsproblem zu lösen.

Semaphore zählen:

Seine Größe kann innerhalb einer uneingeschränkten Domäne variieren vary. Es wird verwendet, um die Autorität über den Zugriff auf Ressourcen mit zahlreichen Instanzen zu haben.

Das Linux POSIX-Framework hat sein integriertes Semaphore-Repository. Um es zu verwenden, müssen wir:

Fast alle POSIX-Semaphore-Methoden und -Formulare sind prototypisch oder in "Semaphore" spezifiziert.h'. Wir verwenden den Semaphor, um eine Entität oder ein Objekt zu beschreiben als:

>> sem_t sem_name;

Hier sind verschiedene Funktionen, die wir in POSIX Semaphore verwenden würden.

Semi_init

Um ein Semaphor zu initialisieren, müssen Sie die Methode sem_init verwenden. In dieser Funktion entspricht sem einem initialisierten Semaphor-Objekt. Pshared ist ein Banner oder Flag, das angibt, ob der Semaphor mit einer forked()-Prozedur geteilt werden kann oder nicht. Gemeinsam genutzte Semaphoren werden derzeit nicht von LinuxThreads unterstützt. Der Argumentwert ist der Startwert, auf den das Semaphor fixiert wird.

>> int sem_init(sem_t *sem, int pshared, unsigned int value);

Sem_wait

Wir werden die sem-wait-Methode verwenden, um einen Semaphor zu halten/zu sperren oder ihn warten zu lassen. Wenn das Semaphor mit einem negativen Wert versehen wurde, wird der Aufrufzyklus automatisch gesperrt. Immer wenn ein anderer Thread sem_post aufruft, erwacht einer der bereits blockierten Prozesse.

>> int sem_wait(sem_t *sem);

Sem_post

Wir verwenden die Methode sem_post, um den Wert eines Semaphors zu erhöhen. Beim Aufruf erhöht sem_post den Wert und einer der bereits verstopften oder wartenden Prozesse erwacht.

>> int sem_post(sem_t *sem);

Sem_getvalue

Wenn Sie den Wert eines Semaphors wissen möchten, müssen Sie die folgende Funktion sem_getvalue  verwenden . Es erhält den aktuellen Wert des Semaphors und wird in das auf Valp gerichtete Ziel platziert.

>> Int sem_getvalue(sem_t *sem, int *valp);

Sem_destroy

Sie sollten die Methode sem_destroy verwenden, wenn Sie den Semaphor zerstören möchten. Wenn der Untergang des Semaphors fortgesetzt werden soll, wird kein Thread im Semaphor warten.

>> Int sem_destroy(sem_t *sem);

Installieren Sie das GCC-Dienstprogramm

Um den POSIX Semaphore C-Code zu kompilieren, muss das gcc-Dienstprogramm auf Ihrem Linux-System installiert sein. Öffnen Sie zu diesem Zweck Ihr Befehlsterminal und versuchen Sie den folgenden Befehl.

$ sudo apt-get install gcc

Bestätigen Sie Ihre Aktion, indem Sie auf drücken Ja.

Implementierung von POSIX Semaphore mit C-Programmierung in Ubuntu

Ganz am Anfang müssen Sie eine neue Datei mit a . erstellen .cpp-Erweiterung auf Ubuntu 20.04-System. Dazu müssen Sie zu Ihrem Home-Verzeichnis navigieren und eine neue leere Datei namens new erstellen.cpp. Sie können es auch mit dem Touch-Befehl in Ihrem Befehlsterminal erstellen.

Sie können sehen, dass die neuen.cpp-Datei wurde im Home-Verzeichnis erstellt.


Nach der Erstellung des .cpp-Datei, öffnen Sie sie als Texteditor in Ihrem Linux-System und schreiben Sie den folgenden Code so wie er ist in diese Datei. Danach speichern und schließen.

Führen Sie das POSIX Semaphore C-Programm in Ubuntu 20tu aus.04

Öffnen Sie Ihr Terminal in Ubuntu 20.04 und führen Sie den folgenden gcc-Befehl gefolgt vom Dateinamen aus.

$gcc-Dateiname.c -lpthread -lrt

Es werden 2 Fäden gebildet, einer wird nach 2 Sekunden des anderen gebildet. Nach Erhalt der Schraube schläft der allererste Thread für 4 Sekunden. Nach dem Aufruf würde der zweite Thread also nicht direkt beitreten, und dies wird 4-2=2 Sekunden nach dem Aufruf angezeigt. Hier ist die Ausgabe:

Wenn wir kein Semaphor verwendet hätten, wäre das Ergebnis gemäß der Kontextumschaltung möglicherweise wie folgt ausgefallen:

Fazit

In dieser Anleitung wurde ein detaillierter Überblick über die Verwendung von POSIXSemaphore mit der C-Programmierung in Ubuntu 20 gegeben. Durch die bloße Verwendung der POSIX- oder Pthread-Bibliothek im gesamten C-Code kann der POSIX-Semaphor ganz einfach verwendet werden, um Race-Conditions während der Codierung zu verhindern.

Kostenlose und Open-Source-Spiele-Engines für die Entwicklung von Linux-Spielen
Dieser Artikel behandelt eine Liste von kostenlosen und Open-Source-Spiele-Engines, die für die Entwicklung von 2D- und 3D-Spielen unter Linux verwend...
Shadow of the Tomb Raider für Linux Tutorial
Shadow of the Tomb Raider ist die zwölfte Erweiterung der Tomb Raider-Reihe – ein Action-Adventure-Franchise von Eidos Montrealdos. Das Spiel wurde vo...
So steigern Sie die FPS unter Linux?
FPS steht für Bilder pro Sekunde. Die Aufgabe von FPS besteht darin, die Bildrate bei Videowiedergaben oder Spielleistungen zu messen. In einfachen Wo...