POSIX -Semaphoren in C

POSIX -Semaphoren in C

„Obwohl jede Programmiersprache viele Bibliotheken für bestimmte Zwecke hat, hat die POSIX -Bibliothek von C ihren Platz. Es wurde entwickelt, um eine große Harmonisierung zwischen den Prozessen zu schaffen, und hilft sehr bei der Verwendung von Multithreading innerhalb der Programme, ich.e., Erstellen Sie mehrere Threads und synchronisieren deren Ausführung. Innerhalb dieses Handbuchs heute sehen Sie eine einfache Illustration der Verwendung von POSIX -Semaphoren in C. Für die basischen C -Code -Beispiele müssen wir seinen Compiler im System konfigurieren. Vorher müssen wir das System jedoch aktualisieren, da es ein Muss für die reibungslose Ausführung von Code ist. Somit ist die im angehängte SNAP angezeigte Abfrage ein Muss, um Ihr Linux-Betriebssystem mit dem Dienstprogramm „APT“ zu aktualisieren und zu aktualisieren.”


Dieser Vorgang erforderte ungefähr 55 KB Platz auf Ihrer Linux -Plattform, um die Updates reibungslos durchzuführen. Wenn Sie bereit sind, so viel Platz zu geben, tippen Sie auf „Y“, um weiterzumachen. Die Verarbeitung wird in einigen Minuten abgeschlossen sein.


Nachdem das System vollständig aktualisiert wurde, konfigurieren wir den Compiler der C-Sprache in unserem System mit dem APT-Get-Dienstprogramm im Befehl "Installation". Verwenden Sie "GCC" als Schlüsselwort, und das war's.

Sem_init ()

Ein frisches Semaphor würde erstellt, wenn bereits ein nicht identifiziertes Semaphor bei „S“ vorhanden ist. Andernfalls wird dieses bereits vorhandene Semaphor verworfen. Während dieser Methode steht „S“ für eine Semaphore -Instanz, die konstruiert wurde, und gemeinsam genutzt wird ein Signal oder ein Wimpel, das angibt. Der Eingangswert dient als Set -Set -Anfänger -Punkt des Semaphors.

Int sem_init (sem_t* s, int freigegeben, nicht signiert int Wert);

Sem_wait ()

Durch die Ausführung einer Semaphor -Sperraktion auf das Semaphor, das durch „S“ angegeben ist. Das Sem-Wait-Verfahren wird verwendet, um ein Semaphor zu behalten oder es in der Schlange stehen zu lassen. Einige der zuvor überlasteten Prozesse wecken, wenn einige andere Prozesse sem_post () aufrufen.

int sem_wait (sem_t *s);

Sem_post ()

Wenn der SEM -Post aufgerufen wird, wird der Wert erhöht, und dann wird eine der zuvor unterstützten oder wartenden Operationen ausgeführt, i, ich.e., Schaltet das bereits gesperrte Semaphor frei.

int sem_post (sem_t *s);

Sem_destroy ()

Ein initialisiertes namenloses Semaphor „S“ wird zerstört, indem die Funktion SEM DESTREA () verwendet wird.

int sem_destroy (sem_t *s);

Beispiel

Um die Semaphoren zu verstehen, werden wir zuerst eine C -Datei erstellen und dann einen Code hinzuzufügen. Um eine zu erstellen, verwenden Sie die Abfrage „Touch“ und finden Sie die neue Datei im Home -Ordner Ihres Systems.


Jetzt müssen Sie Ihre leere C -Datei mit einem einfachen Editor öffnen, um einen guten Code darin zu generieren. Wir haben bisher den Redakteur "Nano" ausprobiert, wie im Snap unten gezeigt.


Wie wir alle wissen, dass alle Programmiersprachen ohne Bibliotheken nicht funktionieren können, da diese Bibliotheken eine große Anzahl von Klassen, Strukturen, Funktionen und Objekten enthalten, die für das Gesamtsystem verwendet werden sollen. Wir beginnen dieses C-Programm mit der Verwendung einiger grundlegender und must-have-Bibliotheken für die POSIX-Semaphoren.

Um diese Bibliotheken im Code zu verwenden, müssen wir das Zeichen „#“ mit dem Schlüsselwort „Include“ für jede Bibliothek verwenden. Im Moment haben wir insgesamt 4 Bibliotheken hinzugefügt, die in diesem Programm zu haben müssen. Sonst funktioniert unser Programm nicht richtig. Der erste „Stdio.H ”Header-Bibliothek ist in jedem C-Programm normalerweise ein Muss. Daher verwenden wir es, um Eingänge reibungslos hinzuzufügen und Ausgaben aus dem Code zu erhalten. Die zweite Bibliothek, die wir hier verwenden, ist das „phread.H ”das ist ein Muss für die Verwendung von Thread -Programmierung, ich.e., Multithreading.

Wir werden diese Bibliothek verwenden, um Threads in einem Programm zu erstellen. Die nächste und wichtigste Bibliothek in diesem Code ist das Semaphor.H". Es wurde verwendet, um die Fäden glatt zu synchronisieren. Zu guter Letzt ist die Bibliothek „Unistd.H “, was es uns ermöglicht, benutzerdefinierte verschiedene Funktionen und Konstanten zu verwenden. Jetzt haben wir das Semaphor "S" mit dem integrierten Objekt "SEM_T" der Semaphore-Bibliothek deklariert. Hier kommt die thread-benutzerdefinierte Funktion „T“ ohne Rückgabeart. Es wurde einige integrierte Semaphor-Funktionen verwendet, um Synchronisation durchzuführen. Die Funktion sem_wait () ist hier, um das Semaphor "S" mit dem "&" Charakter zu halten.

Innerhalb des Halte. Eine andere printf () -Anweisung zeigt eine neue Nachricht an, und die Funktion sem_post () wird ausgeführt, um die Sperre für Semaphor "s zu veröffentlichen.”

#enthalten
#enthalten
#enthalten
#enthalten
sem_t s;
void * t (void * arg)
sem_wait (& s);
printf ("Willkommen! \N");
Schlaf (4);
printf ("bye!\N");
sem_post (& s);

Schauen wir uns die main () -Methode dieses C -Programms für Semaphoren genau an. Die Funktion sem_init () wurde hier verwendet, um ein neues Semaphor -S -S -Semaphor -Semaphor zu erstellen, das nicht mit einer Gabel () -Methode verteilt wurde, i, i.e., "0", und sein Ausgangspunkt ist auf 1 gesetzt. Das Objekt pThread_t aus der PThread -Bibliothek von C wurde verwendet, um zwei Threads mit zwei Thread -Objekten zu erstellen, O1 und O2. Die Anweisung printf () ist hier, um anzuzeigen, dass wir den ersten Thread mit der Funktion pThread_create () in der nächsten Zeile erstellen werden.

Wir haben das O1 -Thread -Objekt mit Nullbeschränkungen an diese Funktion übergeben und die Funktion "t" aufgerufen, indem wir es in die Parameter übergeben haben. Nach einem Schlaf von 4 Sekunden wurde ein weiterer Thread mit Objekt O2 erstellt, und die Funktion pThread_join () wird hier verwendet, um den Threads mit einer Main () -Funktion zu verbinden. Die Funktion sem_destroy () ist hier, um das Semaphor „S“ zu zerstören, und alle blockierten Threads werden ebenfalls veröffentlicht.

int main ()
sem_init (& s, 0, 1);
pThread_t O1, O2;
printf ("in einem 1. Thread jetzt ... \ n");
pthread_create (& o1, null, t, null);
Schlaf (4);
printf ("in einem 2. Thread jetzt ... \ n");
pthread_create (& o2, null, t, null);
pthread_join (o1, null);
pThread_join (O2, NULL);
sem_destroy (& s);
Rückkehr 0;

Wir erstellen das C -Programm mit dem „GCC“ -Kompiler. Die Optionen "-lrt" und "-lpThread" werden zur Ausführung der POSIX-Thread-Funktionen verwendet. Beim Laufen des ".A/.OUT “Abfrage, der erste Thread wurde erstellt. Es geht schlafen nach dem Drucken der ersten Nachricht.


Der zweite Thread wurde synchronisiert, und nach 4 Sekunden wurde der erste Thread veröffentlicht und der zweite Thread wurde 4 Sekunden lang gesperrt.


Am Ende wurde auch der zweite Thread veröffentlicht.

Abschluss

Das ist es um die POSIX -Semaphoren in C, während einige ihrer Hauptfunktionen verwendet werden, um verschiedene Threads zu synchronisieren. Nachdem Sie diesen Artikel durchlaufen haben, können Sie Possixen immer mehr verstehen.