POSIX Semaforer med C -programmering

Posix Semaphores With C Programming



POSIX refererer til det bærbare grensesnittet til operativsystemet, som er en IEEE -standard, utviklet for å hjelpe portabilitet av forskjellige applikasjoner. POSIX er et forsøk på å bygge en felles standardisert versjon av UNIX gjennom et samarbeid med leverandører. Det ville gjøre porting av apper blant maskinvareplattformer enklere hvis de er effektive. Hewlett-Packard integrerer POSIX i henholdsvis sin lisensierte MPE/iX OS versjon 5.0 og HP/UXX versjon 10.0 (UNIX).

POSIX -standarden har mye mer enn ti deler, men to er lett tilgjengelige. POSIX.1 beskriver C -programmeringsgrensesnitt (dvs. et systemanropsbibliotek) for filer, prosedyrer og I/O -terminaler. C POSIX -pakkebiblioteket for POSIX -plattformer er et rammeverk for C -standardbiblioteket. Dette er etablert på samme tid som standard ANSI C. For å gjøre POSIX kompatibel med standard C, har flere forsøk blitt gjort. POSIX gir tilleggsfunksjoner til de som er implementert i standard C.







POSIX Semaforer

En semafor er en datastruktur som ofte brukes til å synkronisere prosessene og hjelpe tråder uten at de samhandler med hverandre for å fungere sammen. Grensesnittet for semaforer er spesifisert av POSIX -standarden. Det er ikke en del av Pthreads. Imidlertid gir de fleste UNIX -er som støtter Pthreads til og med semaforer. I Unix-lignende rammer, som Linux, blir semaforer slått sammen med meldingskøer og felles minne under Interprocess Communication (IPC) -tjenestene. De eldre rammeverk V -semaforene og de moderne POSIX -semaforene blir to typer semaforer. POSIX Semaphore -anrop er så mye enklere enn System V Semaphore -anrop. Selv om System V-semaforer er lettere å få tak i, spesielt på tidligere Unix-lignende plattformer. Det er behov for å koble programmer som bruker POSIX -semaforer til Pthread -biblioteket. Vi tar en titt på POSIX -semaforene i denne artikkelen.



Hvorfor POSIX Semaforer?

Det er et stort problem rundt tråder, som er løpstilstand. Det er en omstendighet der to tråder søker å skaffe og endre den samme informasjonen, og dermed gjøre den motstridende. For å unngå en løpstilstand har vi brukt semaforer i veldig lang tid.



Semaforer er tilgjengelige i to typer:





Binær semafor :

Det er også anerkjent som en mutex -lås. Den ville bare ha to mulige verdier, 0 og 1. Verdien vil bli initialisert som 1. Den brukes til å håndheve en rekke prosesser for å løse det alvorlige avsnittsproblemet.



Counting Semaphore :

Størrelsen kan variere på tvers av et ubegrenset domene. Den brukes til å ha autoritet over tilgang til mange eksemplarer.

Linux POSIX -rammeverket har sitt integrerte Semaphore -depot. For å bruke det må vi:

  • Legg til semafor.h
  • Pile opp koden ved å koble til -lpthread -lrt.

Nesten alle POSIX Semaphore -metoder og -former er prototypet eller spesifisert i ‘Semaphore.h’. Vi vil bruke Semaforen til å beskrive en enhet eller et objekt som:

>>sem_t sem_name;

Her er forskjellige funksjoner vi ville bruke i POSIX Semaphore.

Sem_init

For å initialisere en semafor må du bruke sem_init -metoden. I denne funksjonen tilsvarer sem et initialisert semaforobjekt. Pshared er et banner eller flagg som angir om semaforen kan deles med en forked () -prosedyre eller ikke. Delte semaforer er for tiden ikke avstivet av LinuxThreads. Argumentverdien er startverdien som semaforen er festet til.

>> intsem_init(sem_t*sem, intdelt, usignert intverdi);

Sem_vente

Vi bruker sem-wait-metoden til å holde/låse en semafor eller få den til å vente. Hvis semaforen har fått en negativ verdi, blir anropssyklusen automatisk blokkert. Når en annen tråd kaller sem_post, våkner en av de allerede tilstoppede prosessene.

>> intsem_vente(sem_t*sem);

Sem_post

Vi vil bruke sem_post -metoden for å øke verdien av en semafor. Ved anrop vil sem_post øke verdien, og en av de allerede tilstoppede eller ventende prosessene våkner.

>> intsem_post(sem_t*sem);

Sem_getverdi

Hvis du vil vite om verdien av en semafor, må du bruke funksjonen sem_getvalue nedenfor. Den vil få nåverdien av semaforen og bli plassert i den valpspissede destinasjonen.

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

Sem_destroy

Du bør bruke sem_destroy -metoden hvis du vil ødelegge semaforen. Hvis dødsfallet til semaforen skal fortsette, vil ingen tråd vente i semaforen.

>>Int sem_destroy(sem_t*sem);

Installer GCC -verktøyet

For å kompilere POSIX Semaphore C -koden må du ha gcc -verktøyet installert i Linux -systemet. For dette formålet, åpne kommandoterminalen og prøv kommandoen nedenfor.

$sudo apt-get install gcc

Bekreft handlingen din ved å slå OG .

Implementering av POSIX Semaphore med C -programmering i Ubuntu

Helt i begynnelsen må du opprette en ny fil med en .cpp -utvidelse på Ubuntu 20.04 -systemet. For dette må du navigere mot hjemmekatalogen og lage en ny tom fil som heter new.cpp. Du kan også opprette den ved hjelp av berøringskommandoen i kommandoterminalen.

Du kan se at den nye.cpp -filen er opprettet i hjemmekatalogen.


Etter opprettelsen av .cpp -filen, åpner du den som et tekstredigeringsprogram i Linux -systemet og skriver koden nedenfor i denne filen som den er. Etter det, lagre og lukk den.

Utfør POSIX Semaphore C -programmet i Ubuntu 20.04

Åpne terminalen i Ubuntu 20.04 og kjør kommandoen gcc nedenfor, etterfulgt av filnavnet.

$gccfilnavn.c –lpthread –lrt

Det er dannet 2 tråder, den ene dannes etter 2 sekunder av den andre. Etter å ha mottatt bolten, sover den aller første tråden i 4 sekunder. Så etter at den har blitt kalt, ville den andre tråden ikke bli med direkte, og dette vil vises 4-2 = 2 sekunder etter at den har blitt kalt. Her er utgangen:

Hvis vi ikke hadde brukt semafor, i henhold til kontekstbytte, kan resultatet ha vært som observerer:

Konklusjon

I denne veiledningen er det gitt en detaljert oversikt over bruken av POSIXSemaphore med C -programmering i Ubuntu 20. Ved å bare bruke POSIX- eller Pthread -biblioteket gjennom visse C -koder, kan POSIX Semaphore ganske enkelt brukes til å forhindre løpsforhold under koding.