POSIX refererer til det bærbare grensesnittet til operativsystemet, som er en IEEE-standard, utviklet for å hjelpe bærbarhet av forskjellige applikasjoner. POSIX er et forsøk på å bygge en felles standardisert versjon av UNIX gjennom et samarbeid mellom leverandører. Det vil gjøre porting av apper mellom maskinvareplattformer enklere hvis de er effektive. Hewlett-Packard integrerer POSIX i sin lisensierte MPE / iX OS versjon 5.0 og HP / UXX versjon 10.0, henholdsvis (dens UNIX).
POSIX-standarden har mye mer enn ti deler, men to er lett tilgjengelige. POSIX.1 beskriver C-programmeringsgrensesnitt (i.e., 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 det blitt gjort flere forsøk. 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 deres interaksjon 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 rammeverket V-semaforer 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 Semafhores?
Det er et stort problem rundt tråder, som er "race condition". Det er en omstendighet der to tråder søker å skaffe og endre den samme informasjonen, og dermed gjøre den motstridende. For å unngå 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. Det ville bare ha to mulige verdier, 0 og 1. Verdien initialiseres som 1. Det blir brukt til å håndheve mange prosesser for å løse det alvorlige seksjonsspørsmålet.
Teller Semaphore:
Størrelsen kan variere på et ubegrenset domene. Det brukes til å ha autoritet over tilgang til mange ressurser.
Linux POSIX-rammeverket har sitt integrerte Semaphore-depot. For å bruke den, 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 bruker Semaphore til å beskrive en enhet eller et objekt som:
>> sem_t sem_name;Her er forskjellige funksjoner vi vil bruke i POSIX Semaphore.
Sem_init
For å initialisere en semafor, må du bruke metoden sem_init. I denne funksjonen tilsvarer sem et initialisert semaforobjekt. Pshared er et banner eller flagg som spesifiserer om semaforen kan deles med en forked () prosedyre eller ikke. Delte semaforer er ikke for tiden avstivet av LinuxThreads. Argumentverdien er startverdien som semaforen er festet til.
>> int sem_init (sem_t * sem, int pshared, usignert int-verdi);Sem_wait
Vi bruker sem-vent-metoden for å holde / låse en semafor eller få den til å vente. Hvis semaforen har fått en negativ verdi, blir anropssyklusen automatisk blokkert. Når som helst annen tråd kaller sem_post, våkner en av de allerede tilstoppede prosessene.
>> int sem_wait (sem_t * sem);Sem_post
Vi bruker metoden sem_post for å øke verdien av en semafor. Ved anrop vil sem_post øke verdien, og en av de allerede tilstoppede eller ventende prosessene våkner.
>> int sem_post (sem_t * sem);Sem_getvalue
Hvis du vil vite om verdien av en semafor, må du bruke sem_getvalue-funksjonen nedenfor. Den vil oppnå nåverdien av semaforen og plasseres i den valp-pekte destinasjonen.
>> Int sem_getvalue (sem_t * sem, int * valp);Sem_destroy
Du bør bruke sem_destroy-metoden hvis du vil ødelegge semaforen. Hvis semaforens bortgang skal fortsette, vil ingen tråd vente i semaforen.
>> Int sem_destroy (sem_t * sem);Installer GCC Utility
For å kompilere POSIX Semaphore C-koden, må du ha gcc-verktøyet installert i Linux-systemet ditt. For dette formålet, åpne kommandoterminalen og prøv kommandoen nedenfor.
$ sudo apt-get install gcc
Bekreft handlingen din ved å trykke Y.
Implementering av POSIX Semaphore med C-programmering i Ubuntu
Helt i starten må du opprette en ny fil med en .cpp-utvidelse på Ubuntu 20.04-systemet. For dette må du navigere mot hjemmekatalogen din og opprette en ny tom fil som heter ny.cpp. Du kan også opprette den ved hjelp av berøringskommandoen i kommandoterminalen.
Du kan se at den nye.cpp-fil er opprettet i hjemmekatalogen.
Etter etableringen av .cpp-fil, åpne den som en teksteditor i Linux-systemet ditt og skriv koden nedenfor i denne filen som den er. Lagre og lukk den etter det.
Utfør POSIX Semaphore C-programmet i Ubuntu 20.04
Åpne terminalen din i Ubuntu 20.04 og utfør gcc-kommandoen nedenfor etterfulgt av filnavnet.
$ gcc filnavn.c -lpthread -lrt
Det dannes to 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 er blitt kalt, vil ikke den andre tråden bli med direkte, og dette vises 4-2 = 2 sekunder etter at den er blitt kalt. Her er utgangen:
Hvis vi ikke hadde brukt semafor, i henhold til kontekstbytte, kan resultatet ha blitt som observert:
Konklusjon
I denne guiden er det gitt en detaljert oversikt over bruken av POSIXSemaphore med C-programmering i Ubuntu 20. Ved å bare bruke POSIX- eller Pthread-biblioteket gjennom en viss C-kode, kan POSIX Semaphore ganske enkelt brukes til å forhindre løpsforhold under koding.