C PTHREAD_MUTEX_LOCK Funksjon Bruk

C PTHREAD_MUTEX_LOCK Funksjon Bruk
Som navnet antyder, må funksjonen “Pthread_Mutex_lock” brukes til å låse noe. POSIX -biblioteket med C kom med denne funksjonen for å låse en spesifikk tråd som kan brukes som en delt ressurs for en annen funksjon i et program. Det er nødvendig å unngå dødvakt mens du utføres når to eller flere funksjoner bruker samme tråd som deres ressurs for fullføring av utførelse. Derfor vil vi diskutere bruken av "pthread_mutex_lock" -funksjonen til C Posix -biblioteket i Ubuntu 20.04 System.

Eksempel 01:

La oss starte med det første eksemplet for å se mutex_lock () -funksjonen til POSIX i C -kode. Vi har startet med filopprettelsen med Ubuntus "Touch" -instruksjon i skallet. Denne nylig genererte filen finner du i Linux -hjemmemappen din. For å legge til koden i denne filen, må du åpne den i noen Ubuntus redaktør i.e., tekst, nano eller vim. Vi bruker Nano Editor her for vår Code Creation. Begge kommandoene er oppført på bildet.

Vi starter C -koden vår med noen C -overskrifter. Disse overskriftspakkene inkluderer bruk av standard input-output for kode, standardbiblioteker, strengoverskrifter og POSIX Thread Library. Vi har initialisert et posix trådobjekt “th” i størrelse 3 i.e. Det vil lage bare 3 tråder ved hjelp av ID -er.

Etter dette er variablene for heltallstypen erklært i.e., “Jeg” og teller ”. Variabelen “i” initialiseres til 0. Her kommer pthread_mutex_t -variabelen for å erklære "låsen" for en tråd. Selv om utførelsen starter fra hovedmetoden () må vi se på trådfunksjonen først. Denne funksjonen kalles den kritiske delen av koden vår på grunn av "mutex_lock" -funksjon. I starten av trådfunksjonen bruker PTHREAD_MUTEX_LOCK -funksjonen låsvariabelen for å låse den aktuelle tråden ved å bruke sin "ID" som er bestått av Main () -funksjonen Pthread_Create () -metoden.

Nå kan ingen annen tråd bruke denne tråden før denne tråden er låst opp. Så det vil fortsette å behandle. Den lange type variabelen “i” initialiseres til 0 for bruk i “for” -sløyfen. "Count" -variabelen er økt med 1. Tellevariabelen brukes i utskriftserklæringen for å gi oss beskjed om at “Tråd1” startes nå. For “Loop” vil bli initialisert her for å gi et øyeblikk av pause til utførelsen av tråden. Etter det vil utskriftserklæringen gi oss beskjed om at tråd 1 kommer til å være ferdig.

Pthread_mutex_unlock () -funksjonen brukes i motsetning til Pthread_Mutex_lock () -funksjonen for å låse opp trådenummer 1. Kontroll går til Main () -metoden. Hoved () -funksjonen fortsetter å lage trådfunksjonen til tellingen når 3. Her kommer svingen på Main () -metoden etter 3 tråder oppretting, lås, lås opp og avslutte.

Hovedfunksjonen () initialiseres med en heltallvariabel “feil”. "IF" -uttalelsen brukes her for å sjekke om initialiseringen av mutex -tråden "l" mislykkes ved å bruke "pthread_mutex_init ()" -funksjonen til POSIX. Hvis initialiseringen mislykkes, vil den skrive ut den aktuelle meldingen i utskriftserklæringen. "Mens" -løkken er her for å se tilstanden i.e. “Jeg” mindre enn 3. Det vil bekrefte at verdien av “jeg” er mindre enn 3 og fortsetter derfor å lage en tråd. Hver tråd blir låst når den heter og ingen annen tråd kan opprettes før da.

Hvis vi fikk en feil i tråden, vil vi vise den feilen i skallet ved å konvertere den til streng ved hjelp av "strerror" -metoden. Pthread_join () -funksjonen brukes til å ta tilbake alle ressursene som er gitt til trådene. Til sist brukes funksjonen "Pthread_Mutex_Destroy ()" for å ødelegge låsobjektet. Programmet vårt slutter her.

Filen er samlet, og vi har ingen feil. Ved utførelse startet hovedfunksjonen () og opprettet en tråd 1.

Etter en stund, på grunn av lås, fullførte tråd 1 utførelsen og ferdig. Etter det er hovedfunksjonen () funksjonen opprettet tråd 2 og den er startet.

Etter at tråd 2 er fullstendig utført, er låsen avsluttet og hovedfunksjonen () opprettet en siste tråd i.e., 3Rd tråd.

Etter at den tredje tråden er utført fullstendig, slippes låsen og kontrollen blir gitt tilbake til hovedmetoden.

Eksempel 02:

La oss ha et annet eksempel for å se arbeidet med "pthread_mutex_lock ()" -funksjonen til Posix's. Koden er startet med de samme toppfilene.

Etter overskriftsfilene har vi opprettet en Mutex Lock -funksjon. Det kommer tre funksjoner. To trådfunksjoner og 1 er den koblede funksjonen. Tråd1 og tråd2 tar innspill fra hoved- () -funksjonen I.e. Trådobjekter Th1 og Th2. Begge trådfunksjonene kaller Show () -metoden og passerer to strenger i parameteren. Når "show" -funksjonen starter, låser den seg med bruken av "pthread_mutex_lock ()" -funksjonen ved å bruke mutex -låsobjektet. Den første utskriftserklæringen tar det første argumentet og viser det. Deretter sover den i 1 sekund, og den andre argumentverdien vises via utskriftsklausulen. I den siste linjen har låsen blitt utgitt ved å bruke "Pthread_Mutex_unlock ()" -funksjonen ved å bruke låsobjektet.

Hovedfunksjonen () startes med opprettelsen av to objekter for tråder i.e. Th1 og Th2. To tråder er opprettet av "pthread_create" -funksjonen ved å passere Th1 og Th2 i parametrene. "Mens" -løkken brukes til å bare løpe og ikke fullføre i enda et sekund. Så programmet fortsetter å behandle seg selv.

Koden er først samlet ved hjelp av "GCC" -kompilatoren i Ubuntu 20.04.

Når koden ble utført, viser du show () metode kalt ved bruk av tråd1 og tråd2 funksjon etter hverandre. Programmet stoppet ikke etter at trådene ble utført. Så vi må stoppe utførelsen kraftig ved å bruke snarveien “Ctrl+Z”.

For å forhindre at systemet ditt skal utføre non-stop-prosessering, må vi fjerne "mens" -løkken fra koden i Main () -metoden. Return 0 -setningen er erstattet med "mens" -løkken.

Nå er dette programmet klart til å bli samlet og utført. Så vi har samlet dette programmet med en "GCC" -kompilator. Etter det har henrettelsen funnet sted. Du kan se at programmet er avsluttet seg selv etter utførelsen av to tråder. Tråden1 fungerte og showet () -funksjonen låst seg mens han ble utført. Etter utførelsen har den gitt ut seg selv og Thread2 er utført. "Show" -funksjonen kalles i den og passerte noen parametere. "Show ()" -funksjonen låst seg og ikke slippes før utførelsen er gjort og funksjonen mutex_lock kalles ikke. Etter det blir kontrollen gitt tilbake til Main () -metoden og programmet slutter.

Konklusjon

Dette handlet om hva vi kan gjøre for å få deg til å forstå bruken av Pthread_Mutex_lock -funksjonen i C -kode. Vi hadde prøvd to ekstremt forskjellige programmer for å gjøre det forståelig for deg og forklarte både eksemplene ganske kort og enkelt. Vi er ganske optimistiske om at denne artikkelen vil være flott for hver C -bruker.