Posix semaforer i C

Posix semaforer i C

Selv om hvert programmeringsspråk har mange biblioteker for spesifikke formål, har POSIX -biblioteket til C sin plass. Den er designet for å skape en stor harmonisering blant prosessene og hjelper mye med å bruke multitReading i programmene, i.e., lage flere tråder og synkronisere utførelsen. Innenfor denne guiden i dag vil du se en enkel illustrasjon av å bruke POSIX -semaforer i C. For de grunnleggende C -kodeeksemplene må vi konfigurere kompilatoren i systemet. Men før det, må vi oppdatere systemet, da det er et må nødvendig trinn for jevn utførelse av kode. Dermed er spørringen som vises i det vedlagte SNAP et must å oppdatere og oppgradere Linux-operativsystemet ditt med "APT" -verktøyet.”


Denne prosessen krevde omtrent 55 kb plass på Linux -plattformen din for å utføre oppdateringene jevnt. Hvis du er villig til å gi så mye plass, kan du trykke på "Y" for å fortsette. Behandlingen vil være fullført i løpet av noen minutter.


Etter at systemet ble oppgradert fullt ut, skal vi konfigurere kompilatoren til C-språket i systemet vårt med den apt-get-verktøyet i “Install” -kommandoen. Bruk "GCC" som et nøkkelord, og det er det.

Sem_init ()

En fersk semafor vil bli opprettet når det allerede er en uidentifisert semafor på “S”; Ellers kommer den allerede eksisterende semaforen til å bli kastet. Gjennom denne metoden står “S” for en semaforforekomst som er konstruert, og delt er et signal eller vimpel som indikerer om semaforen kan distribueres med en gaffel () -metode eller på annen måte. Inngangsverdien fungerer som semaforens faste begynnelsespunkt.

Int sem_init (sem_t* s, int delt, usignert int -verdi);

Sem_wait ()

Ved å utføre en Semaphore Lock -handling på semaforen som er spesifisert av “S”, holder SEM_WAIT () -metoden at SEMAPHORE. SEM-Wait-prosedyren vil bli brukt til å beholde en semafor eller la den stå i kø. Noen av de tidligere overbelastede prosessene vekker seg når noen annen prosess påkaller sem_post ().

int sem_wait (sem_t *s);

Sem_post ()

Når SEM -innlegget kalles, økes verdien, og deretter begynner en av de tidligere sikkerhetskopierte eller avventer operasjoner å kjøre, i.e., låser opp den allerede låste semaforen.

int sem_post (sem_t *s);

Sem_destroy ()

En initialisert navnløs semafor "S" blir ødelagt ved å bruke SEM -ødeleggelsen () -funksjonen ().

int sem_destroy (sem_t *s);

Eksempel

For å forstå semaforene, skal vi først opprette en C -fil og deretter legge til en kode til den. For å opprette en, bruk "Touch" -spørsmålet, så finner du den nye filen i systemets hjemmemappe.


Nå må du åpne den tomme C -filen din med en enkel redigering for å generere god kode i den. Vi har prøvd “Nano” -redaktøren så langt, som vist i snapen under.


Som vi alle vet at alle programmeringsspråk ikke kan fungere uten biblioteker, da disse bibliotekene har et stort antall klasser, strukturer, funksjoner og objekter som skal brukes til det overordnede systemet fungerer. Så vi starter dette C-programmet med bruk av noen grunnleggende og må-ha biblioteker for POSIX-semaforene.

For å bruke disse bibliotekene i koden, må vi bruke "#" -tegnet med nøkkelordet "inkluderer" for hvert bibliotek. Akkurat nå har vi lagt til totalt 4 biblioteker som må ha i dette programmet. Ellers vil programmet vårt ikke fungere riktig. Den første “stdio.H ”headerbibliotek er vanligvis et must-have i hvert C-program fordi det lar oss ha inngangs- og utgangsoperasjoner i koden. Derfor bruker vi den for å legge til innganger og få utganger fra koden jevnt. Det andre biblioteket vi bruker her er “Pthread.h ”som er et must for bruk av trådprogrammering, i.e., Multithreading.

Vi bruker dette biblioteket til å lage tråder i et program. Det neste og viktigste biblioteket i denne koden er “Semaforen.h ”. Det er blitt brukt til å synkronisere trådene jevnt. Sist, men ikke minst, er biblioteket “Unistd.H, ”som gjør oss i stand til å bruke brukerdefinerte diverse funksjoner og konstanter. Nå har vi erklært “S” -semaforen ved å bruke “SEM_T” innebygde objekt på Semaphore-biblioteket. Her kommer tråden brukerdefinerte funksjonen “T” uten returtype. Det har brukt noen innebygde semaforfunksjoner for å utføre synkronisering. Sem_wait () -funksjonen er her for å holde semaforen “S” ved hjelp av “&” -tegnet.

Innenfor holdet ble printf () -klæringen utført sammen med "søvn" -funksjonen for å få dette programmet til å sove i 4 sekunder. En annen PRINTF () uttalelse viser en ny melding, og Sem_Post () -funksjonen blir utført for å frigjøre låsen på Semafor.”

#inkludere
#inkludere
#inkludere
#inkludere
sem_t s;
void * t (void * arg)
sem_wait (& s);
printf ("Velkommen! \ n ");
søvn (4);
printf ("Bye!\ n ");
sem_post (& s);

La oss ta en god titt på Main () -metoden til dette C -programmet for semaforer. Sem_init () -funksjonen er blitt brukt her for å lage en ny semafore “S” som ikke har blitt distribuert med en gaffel () -metode, i.e., “0”, og utgangspunktet er satt til 1. Pthread_t -objektet fra Pthread -biblioteket til C ble brukt til å lage to tråder ved hjelp av to trådobjekter, O1 og O2. Utskriftsuttalelsen er her for å vise at vi skal opprette den første tråden ved hjelp av Pthread_Create () -funksjonen på den aller neste linjen.

Vi har gitt O1 -trådobjektet til denne funksjonen med nullbegrensninger og kaller funksjon “T” ved å passere den i parametrene. Etter en søvn på 4 sekunder ble en annen tråd opprettet med objekt O2, og Pthread_Join () -funksjonen brukes her for å bli sammen med trådene med en Main () -funksjon. Sem_destroy () -funksjonen er her for å ødelegge “S” semaforen, og alle de blokkerte trådene vil også bli utgitt.

int main ()
sem_init (& s, 0, 1);
pthread_t o1, o2;
printf ("I en første tråd nå ... \ n");
pthread_create (& o1, null, t, null);
søvn (4);
printf ("I en 2. tråd nå ... \ n");
pthread_create (& o2, null, t, null);
pthread_join (o1, null);
pthread_join (o2, null);
sem_destroy (& s);
retur 0;

Vi sammenstiller C -programmet med "GCC" -kompilatoren; Alternativene "-lrt" og "-lpthread" brukes til å utføre POSIX-trådfunksjonene. Når du kjører “.en/.ut ”spørring, den første tråden ble opprettet. Det går i dvale etter å ha skrevet ut den første meldingen.


Den andre tråden ble synkronisert, og etter 4 sekunder ble den første tråden utgitt, og den andre tråden ble låst i 4 sekunder.


Til slutt ble den andre tråden også utgitt.

Konklusjon

Det er det om Posix -semaforene i C mens du bruker noen av hovedfunksjonene for å synkronisere forskjellige tråder. Etter å ha gått gjennom denne artikkelen, vil du kunne forstå Posix mer og mer.