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 god harmonisering mellom prosessene og hjelper mye med å bruke multithreading i programmene, dvs. lage flere tråder og synkronisere utførelsen av dem. Innenfor denne guiden i dag vil du se en enkel illustrasjon av bruk av POSIX semaforer i C. For de grunnleggende C-kodeeksemplene må vi konfigurere kompilatoren i systemet. Men før det må vi oppdatere systemet siden det er et nødvendig trinn for jevn utførelse av kode. Derfor er spørringen som vises i vedlagte snap, et must for å oppdatere og oppgradere Linux-operativsystemet ditt med 'apt'-verktøyet.'


Denne prosessen krevde omtrent 55 Kb plass på Linux-plattformen for å utføre oppdateringene jevnt. Hvis du er villig til å gi så mye plass, trykk 'y' for å fortsette. Behandlingen vil bli fullført i løpet av noen minutter.








Etter at systemet ble fullstendig oppgradert, skal vi konfigurere kompilatoren av C-språket i systemet vårt med apt-get-verktøyet i 'install'-kommandoen. Bruk 'gcc' som et nøkkelord, og det er det.





sem_init()

En ny semafor vil bli opprettet når det allerede er en uidentifisert semafor ved 's'; ellers vil den allerede eksisterende semaforen bli forkastet. Gjennom denne metoden står 's' for en semafor-forekomst som har blitt konstruert, og delt er et signal eller vimpel som indikerer om semaforen kan distribueres med en forked()-metode eller på annen måte. Inndataverdien fungerer som semaforens innstilte startpunkt.





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

Sem_vente()

Ved å utføre en semaforlåsehandling på semaforen som er spesifisert av 's', holder sem_wait()-metoden den semaforen. Sem-vent prosedyren vil bli brukt til å beholde en semafor eller la den stå i kø. Noen av de tidligere overbelastede prosessene våkner når en annen prosess påkaller sem_post().



int sem_wait ( nor_t * s ) ;

no_post()

Når sem post kalles, økes verdien, og så begynner en av de tidligere sikkerhetskopierte eller ventende operasjonene å kjøre, dvs. låser opp den allerede låste semaforen.

int sem_post ( nor_t * s ) ;

no_destroy()

En initialisert navnløs semafor 's' blir ødelagt ved å bruke funksjonen sem destroy().

int sem_destroy ( nor_t * s ) ;

Eksempel

For å forstå semaforene skal vi først lage en C-fil og deretter legge til en kode til den. For å opprette en, bruk 'touch'-spørringen, og du vil finne den nye filen i systemets hjemmemappe.


Nå må du åpne den tomme C-filen din med en enkel editor for å generere god kode i den. Vi har prøvd 'nano'-editoren så langt, som vist på snappen nedenfor.


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 for generell systemarbeid. 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 'inkluder' for hvert bibliotek. Akkurat nå har vi lagt til totalt 4 biblioteker som er et must å ha i dette programmet. Ellers vil ikke programmet vårt fungere som det skal. Det første 'stdio.h'-headerbiblioteket er vanligvis et must i hvert C-program fordi det lar oss ha inn- og utdataoperasjoner i koden. Derfor bruker vi den til å legge til innganger jevnt og få utganger fra koden. Det andre biblioteket vi bruker her er 'pthread.h' som er et must for bruk av trådprogrammering, dvs. multithreading.

Vi skal bruke dette biblioteket til å lage tråder i et program. Det neste og viktigste biblioteket i denne koden er 'semaphore.h'. Den har blitt brukt til å jevnt synkronisere trådene. 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 det 'sem_t' innebygde objektet i semaforbiblioteket. Her kommer trådens brukerdefinerte funksjon 'T' uten returtype. Den har brukt noen innebygde semaforfunksjoner for å utføre synkronisering. Sem_wait()-funksjonen er her for å holde semaforen 's' ved å bruke '&'-tegnet.

Innenfor hold ble printf()-setningen utført sammen med 'sleep'-funksjonen for å få dette programmet til å sove i 4 sekunder. En annen printf()-setning viser en ny melding, og sem_post()-funksjonen blir utført for å frigjøre låsen på semaforen 's.'

#include
#include
#include
#include
verken_t s;
tomrom * T ( tomrom * arg ) {
sem_vent ( & s ) ;
printf ( 'Velkommen! \n ' ) ;
sove ( 4 ) ;
printf ( 'Ha det! \n ' ) ;
sem_post ( & s ) ;
}



La oss ta en god titt på hoved()-metoden til dette C-programmet for semaforer. Sem_init()-funksjonen har blitt brukt her for å lage en ny semafor 's' som ikke har blitt distribuert med en forked()-metode, dvs. '0', og startpunktet er satt til 1. pthread_t-objektet fra pthreaden biblioteket til C ble brukt til å lage to tråder ved å bruke to trådobjekter, o1 og o2. Printf()-setningen er her for å vise at vi skal lage den første tråden ved å bruke funksjonen pthread_create() på neste linje.

Vi har sendt o1-trådobjektet til denne funksjonen med NULL-begrensninger og kalt funksjonen 'T' ved å sende den i parameterne. Etter en dvale på 4 sekunder ble en annen tråd opprettet med objekt o2, og pthread_join()-funksjonen brukes her for å koble sammen trådene med en main()-funksjon. Sem_destroy() funksjonen er her for å ødelegge 's' semaforen, og alle blokkerte tråder 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 ) ;
sove ( 4 ) ;
printf ( 'I en andre tråd nå... \n ' ) ;
pthread_create ( & o2,NULL,T,NULL ) ;
pthread_join ( o1,NULL ) ;
pthread_join ( o2,NULL ) ;
no_destroy ( & s ) ;
komme tilbake 0 ;
}



Vi kompilerer C-programmet med 'Gcc'-kompilatoren; alternativene '-lrt' og '-lpthread' brukes for å utføre POSIX-trådfunksjonene. Når du kjører '.a/.out'-spørringen, ble den første tråden opprettet. Den går i dvale etter at den første meldingen er skrevet ut.


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


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

Konklusjon

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