C Programmering

POSIX semaforer med C-programmering

POSIX semaforer med C-programmering

POSIX refererer til den bærbare grænseflade til operativsystemet, som er en IEEE-standard, udviklet til at hjælpe med bærbarhed af forskellige applikationer. POSIX er et forsøg på at opbygge en fælles standardversion af UNIX gennem et samarbejde mellem leverandører. Det ville gøre det lettere at portere apps blandt hardwareplatforme, hvis de er effektive. Hewlett-Packard integrerer POSIX i sin licenserede MPE / iX OS version 5.0 og HP / UXX version 10.Henholdsvis 0 (dens UNIX).

POSIX-standarden har meget mere end ti dele, men to er let tilgængelige. POSIX.1 beskriver C-programmeringsgrænseflader (i.e., et systemopkaldsbibliotek) til filer, procedurer og I / O-terminaler. C POSIX-pakkebiblioteket til POSIX-platforme er en ramme for C-standardbiblioteket. Dette etableres på samme tid som standard ANSI C. For at gøre POSIX kompatibel med standard C er der gjort flere forsøg. POSIX giver yderligere funktioner til dem, der er implementeret i standard C.

POSIX semaforer

En semafor er en datastruktur, der ofte bruges til at synkronisere processerne og hjælpe tråde uden deres interaktion med hinanden for at fungere sammen. Grænsefladen til semaforer er specificeret af POSIX-standarden. Det er ikke en del af Pthreads. Imidlertid giver de fleste UNIX'er, der understøtter Pthreads, endda semaforer. I Unix-lignende rammer, som Linux, flettes semaforer med meddelelseskøer og fælles hukommelse under Interprocess Communication (IPC) -tjenesterne. De ældre rammer V-semaforer og de moderne POSIX-semaforer bliver to typer semaforer. POSIX Semaphore-opkald er så meget lettere end System V Semaphore-opkald. Selvom System V-semaforer er lettere at få, især på tidligere Unix-lignende platforme. Der er behov for at forbinde programmer ved hjælp af POSIX semaforer til Pthread-biblioteket. Vi kigger på POSIX-semaforerne i denne artikel.

Hvorfor POSIX Semafhores?

Der er et stort problem omkring tråde, som er "race condition". Det er en omstændighed, hvor to tråde søger at få og ændre den samme information og derved gøre den modstridende. For at undgå en race-tilstand har vi brugt semaforer i meget lang tid.

Semaforer fås i to slags:

Binær semafor:

Det anerkendes også som en mutex-lås. Det ville kun have to mulige værdier, 0 og 1. Værdien initialiseres som 1. Det bruges til at håndhæve adskillige processer til at løse det alvorlige sektionsproblem.

Tæller Semaphore:

Dens størrelse kan variere på tværs af et ubegrænset domæne. Det bruges til at have autoritet over adgang til ressourcer med mange instanser.

Linux POSIX-rammen har sit integrerede Semaphore-lager. For at bruge det skal vi:

Næsten alle POSIX Semaphore-metoder og former er prototypet eller specificeret i 'Semaphore.h '. Vi bruger Semaphore til at beskrive en enhed eller et objekt som:

>> sem_t sem_name;

Her er forskellige funktioner, vi ville bruge i POSIX Semaphore.

Sem_init

For at initialisere en semafor skal du bruge metoden sem_init. I denne funktion svarer sem til et initialiseret semaforobjekt. Pshared er et banner eller flag, der specificerer, om semaforen kan deles med en forked () -procedure eller ej. Delte semaforer understøttes i øjeblikket ikke af LinuxThreads. Argumentværdien er startværdien, som semaforen er fastgjort til.

>> int sem_init (sem_t * sem, int pshared, usigneret int-værdi);

Sem_wait

Vi bruger sem-vent-metoden til at holde / låse en semafor eller få den til at vente. Hvis semaforen er forsynet med en negativ værdi, blokeres opkaldscyklussen automatisk. Når som helst anden tråd kalder sem_post, vågner en af ​​de allerede tilstoppede processer.

>> int sem_wait (sem_t * sem);

Sem_post

Vi bruger metoden sem_post til at øge værdien af ​​en semafor. Ved opkald øger sem_post værdien, og en af ​​de allerede tilstoppede eller ventende processer vågner.

>> int sem_post (sem_t * sem);

Sem_getvalue

Hvis du vil vide om værdien af ​​en semafor, skal du bruge nedenstående sem_getvalue-funktion. Den opnår den nuværende værdi af semaforen og placeres i den valp-målede destination.

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

Sem_destroy

Du bør bruge sem_destroy-metoden, hvis du vil ødelægge semaforen. Hvis semaforens bortgang skal fortsætte, venter der ingen tråd i semaforen.

>> Int sem_destroy (sem_t * sem);

Installer GCC Utility

For at kompilere POSIX Semaphore C-koden skal du have gcc-værktøjet installeret i dit Linux-system. Til dette formål skal du åbne din kommandoterminal og prøve nedenstående kommando.

$ sudo apt-get install gcc

Bekræft din handling ved at trykke Y.

Implementering af POSIX Semaphore med C-programmering i Ubuntu

I starten skal du oprette en ny fil med en .cpp-udvidelse på Ubuntu 20.04-systemet. Til dette skal du navigere mod dit hjemmekatalog og oprette en ny tom fil med navnet ny.cpp. Du kan også oprette det ved hjælp af berøringskommandoen i din kommandoterminal.

Du kan se, at den nye.cpp-fil er oprettet i hjemmekataloget.


Efter oprettelsen af .cpp-fil, skal du åbne den som en teksteditor i dit Linux-system og skrive nedenstående kode i denne fil, som den er. Derefter skal du gemme og lukke det.

Udfør POSIX Semaphore C-programmet i Ubuntu 20.04

Åbn din terminal i Ubuntu 20.04 og udfør nedenstående gcc-kommando efterfulgt af filnavnet.

$ gcc filnavn.c -lpthread -lrt

Der dannes 2 tråde, den ene dannes efter 2 sekunder af den anden. Efter modtagelse af bolten sover den allerførste tråd i 4 sekunder. Så efter at den er blevet kaldt, ville den anden tråd ikke slutte sig direkte, og dette vises 4-2 = 2 sekunder efter at det er blevet kaldt. Her er output:

Hvis vi ikke havde brugt semafor ifølge kontekstskift, kunne resultatet have været som observeret:

Konklusion

I denne vejledning er der givet en detaljeret oversigt over brugen af ​​POSIXSemaphore med C-programmering i Ubuntu 20. Ved blot at bruge POSIX- eller Pthread-biblioteket gennem en bestemt C-kode kan POSIX Semaphore ganske let bruges til at forhindre race-betingelser under kodning.

Sådan bruges AutoKey til at automatisere Linux-spil
AutoKey er et desktopautomatiseringsværktøj til Linux og X11, programmeret i Python 3, GTK og Qt. Ved hjælp af dets scripting og MACRO-funktionalitet ...
Sådan vises FPS-tæller i Linux-spil
Linux-spil fik et stort skub, da Valve annoncerede Linux-support til Steam-klient og deres spil i 2012. Siden da har mange AAA- og indiespil fundet ve...
Sådan downloades og afspilles Sid Meiers Civilization VI på Linux
Introduktion til spillet Civilization 6 er et moderne udtryk for det klassiske koncept, der blev introduceret i serien af ​​Age of Empires-spil. Ideen...