C pthread_detach funksjonsbruk

C pthread_detach funksjonsbruk
Som vi alle vet, er trådene hoveddelen av enhver behandling mens du jobber i ethvert multiprosesseringsmiljø. Gjenging er et konsept som brukes i programmering også. C -språk kommer med en API som heter “Posix” for å tillate bruk av tråder med forskjellige formål som brukes i kodestykket vårt. En av disse trådene er "Pthread_Detach ()" -funksjonen som brukes til å identifisere eller spesifisere en tråd som koblet helt ut. Det vil også sørge for å frigjøre alle ressursene som brukes av den aktuelle tråden. Innenfor denne artikkelen vil vi argumentere for bruken av Pthread_Detach () -funksjonen på C -språket ved å bruke Ubuntu 20.04 System.

Eksempel 01:

La oss ha det første eksemplet for å se arbeidet med Pthread_Detach -funksjonen. Begynn med terminalen ved å starte den, jeg.e., Ctrl+alt+t. Vi bruker spesifikke kommandoer for å opprette en C -fil, åpne og utføre den. Den aller første kommandoen er å generere en ny fil med den, jeg.e., ta på. Denne nye filen må åpne i en slik redaktør der vi også kan legge til kode i den og gjøre endringer i den. Vi har brukt “Nano” -redaktøren her via kommandoen.

Vi har startet implementeringen av det første eksemplet med noen overskriftsfiler som er nødvendige for at denne koden skal kjøres. Koden vår inneholder to brukerdefinerte funksjoner og 1 main () -metode. Siden utførelsen alltid starter fra Main () -metoden, starter vi også forklaringen fra Main (). Main () -funksjonen kalles “Createet” -metoden i sin første linje. Nå gis kontrollen til "skapet" -funksjonen. Denne funksjonen oppretter et objekt “TH” for å få tråd-IDen ved hjelp av pthread_t innebygd mutable. Printf -setningen viser at vi for øyeblikket er i hovedtråden eller 1st funksjon.

"Pthread_create" -funksjonen brukes her for å lage en ny tråd i denne funksjonen ved å bruke navnet på en annen funksjon, i.e., Ny og binding av "TH" -variabelen for å referere til ID -en. "IF" -uttalelsen brukes til å sjekke om denne hovedfunksjonen () og andre nyopprettede tråder er like eller ikke. Dette har blitt gjort ved å likestille IDene til begge trådene. Den "th" mutable referansen til den nye tråden og pthread_self () returnerer IDen til "Createet" -funksjonen. Hvis begge trådene stemmer overens, vil den skrive ut “Trådene er samme”; Ellers er ikke tråder de samme.”Pthread_join () -funksjonen sikrer at den viktigste trådutførelsen blir avsluttet til den nye tråden er utført og ikke er fullført. Nå er kontrollen helt over til ny tråd.

I ny tråd brukes søvnfunksjonen. Så systemet vil sove i 10 sekunder, og etter det vil ytterligere utførelse finne sted. Pthread_Detach () -funksjonen er her for å fullstendig fjerne den nye tråden fra sin samtalefunksjon, i.e., “Createt.”Her brukes pthread_self () for å finne ut IDen til 'ny tråd' for løsrivelse. Printf -setningen vil vise at denne funksjonstråden vil avslutte nå. Systemet vil sove de neste 10 sekundene igjen ved å bruke den samme "søvn ()" -metoden til C. Pthread_exit () -funksjonen er her for raskt å avslutte den nåværende tråden, som er akkurat nå “Ny.”Nå blir kontrollen gitt tilbake til“ Createet ”-funksjonen. Etter å ha kommet tilbake i denne hovedtråden, har vi møtt en ny Printf -uttalelse for å vise at vi er tilbake i "Createet" -funksjonen. Nå må vi bruke en annen PThread_Exit () -funksjon for å lukke "Createet" -tråden også og gi kontrollen tilbake til hovedfunksjonen (). Så vi har gjort det så langt, og kontroll blir gitt tilbake. Her slutter programmet. Når programmet er ferdig, må vi kompilere det med C -kompilatoren på Ubuntu 20.04.

Du må sørge for at C -kompilatoren allerede er konfigurert på sluttmaskinen. Vi har brukt GCC -kompilatoren i skallet vårt. Så navnet på en fil med nøkkelordet "-lpthread" brukes til å samle koden i henhold til bildet nedenfor.

Etter å ha samlet koden, må vi utføre den for å se utdataene. Kommandoen for utførelse er "./en.ut ”som nedenfor. Da vi har utført kodefilen, startet den hovedfunksjonen og hovedfunksjonen () kalt “Createet” -funksjonen. Printf -uttalelsen om “Createet” viste “Inside Main Thread” og opprettet en ny tråd som heter Ny. En sammenligning av begge trådene er gjort, og den returnerer begge trådene er ikke de samme. Deretter sover et system i 10 sekunder.

Etter 10 sekunder sammenføyer den den opprettede tråden ny. Den nye tråden er løsrevet fra “Createet” -funksjonen og vist at vi er i den "nye" trådfunksjonen. Systemet sover igjen de neste 10 sekundene og går ut av den nye tråden.

Nå er kontrollen over til "Createet" -tråden, og den har spurtet ut at vi er tilbake i hovedtråden. Etter at "Createet" -tråden er fullført, har Main () -funksjonen fått kontroll. Derfor ender programmet her.

Eksempel 02:

La oss ta en ganske annen titt på PTHREAD_DETACH -funksjonen i C. Vi har startet C -koden vår med de samme bibliotekoverskriftene med #include nøkkelord for å gjøre koden vår løpbar. 1 Main () -funksjon og 1 brukerdefinert funksjon som heter “Ny” er definert. Den "nye" funksjonen vil bli brukt som trådfunksjoner. Vi starter forklaringen fra en Main () -metode. Phead_t Mutable erklærer "TH" -variabelen for å få tråd -ID for en ny tråd. Printf -setningen viser at vi har startet hovedfunksjonen og går i 10 sekunders søvn ved bruk av "søvn" -metoden. Den neste Printf viser at en trådfunksjon vil bli opprettet og PThread_Create () -funksjonen til POSIX brukes av denne grunn så langt.

"TH" brukes som en parameter til den nye trådopprettelsesfunksjonen for å få ID for en ny tråd. Pthread_join () -funksjonen er her for å suspendere utførelsen av en hoved () metode helt til den nye tråden, i.e., Ny, utfører. Nå startet den nye funksjonen. Pthread_Detach () -funksjonen er her for å fullstendig fjerne denne funksjonen fra Main () -funksjonen ved å ta tilbake ressursene. Pthread_exit () -funksjonen vil sikre at den nye tråden ikke blir utført lenger. Derfor vil ikke PRINTF -setningen bli utført. Hoved () -tråden blir avsluttet etter utførelse av Pthread_Exit () -funksjonen.

La oss begynne med kodesamlingen med GCC. Heldigvis! Det var vellykket.

Så vi har brukt det samme “./en.ut ”instruksjon her også. Main () -funksjonen begynte å utføre først som utskriftsuttalelsesutgangene. Nå sover systemet i 10 sekunder.

Etter 10 sekunder blir den neste utskriftserklæringen utført og vist at den nye tråden opprettes. Kontrollen er over til ny tråd, og den er løsrevet fra Main () -funksjonen uten å utføre PRINTF -setningen. Derfor er produksjonen vår noe som nedenfor.

Konklusjon:

Så dette handlet om å bruke POSIXs PTHREAD_DETACH -funksjon i C for å fjerne en tråd helt fra hovedanroptråden. Ved å holde det ganske enkelt og forklare illustrasjonene kort, har vi prøvd vårt beste for å få deg til å forstå disse eksemplene implementert i Ubuntu 20.04.