C Programmering

POSIX semaforer med C-programmering

POSIX semaforer med C-programmering

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:

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.

Installer nyeste Dolphin Emulator for Gamecube & Wii på Linux
Dolphin Emulator lar deg spille de valgte Gamecube- og Wii-spillene dine på Linux Personal Computers (PC). Som en fritt tilgjengelig og åpen kildekod...
Hvordan bruke GameConqueror Cheat Engine i Linux
Artikkelen dekker en guide om bruk av GameConqueror-juksemotoren i Linux. Mange brukere som spiller spill på Windows bruker ofte "Cheat Engine" -appli...
Beste spillkonsollemulatorer for Linux
Denne artikkelen vil liste opp populære programvare for spillkonsollemulering tilgjengelig for Linux. Emulation er et programvarekompatibilitetslag so...