Pthread_function in c -språk

Pthread_function in c -språk

POSIX -standarden gir oss muligheten til å utvikle multithreaded -programmer på C -språket. Denne programmeringsteknikken består av å bruke "Pthread" -biblioteket for å åpne en eller flere underprosesstråder som går parallelt med hovedprosessen.

Implementering av tråder gir store fordeler for det endelige programmet siden det fremskynder utførelsestidene ved å kjøre flere oppgaver samtidig, kan være bedre strukturert og gjør bedre bruk av systemressurser.

En tråd opprettes med Pthread_ Create () -funksjonen. Når denne funksjonen er kalt, begynner tråden å kjøre parallelt med hovedprosessen. Når denne funksjonen kalles, returnerer den tråd -ID i utgangsargumentet tråden. Denne identifikatoren brukes til å referere til den opprettede tråden når du bruker trådstyringsfunksjonene som pthread_join () eller pthread_cancel ().

I denne Linux -hint -artikkelen lærer du hvordan du bruker PTHREAD_CANCEL () -funksjonen, en av C -trådstyringsfunksjonene som lar deg avbryte en tråd som allerede kjører.

Syntaks av Pthread_Cancel () -funksjonen på C -språk

int pthread_cancel (pthread_t tråd);

Beskrivelse av Pthread_Cancel () -funksjonen på C -språk

PTHREAD_CANCEL () -funksjonen sender en forespørsel til systemet for å avbryte tråden som er spesifisert av identifikatoren i inngangsargumentet tråd.

Oppfordringen til Pthread_Cancel () -funksjonen innebærer ikke øyeblikkelig avslutning av tråden, men en forespørsel om å gjøre det. Hvorvidt en tråd avsluttes etter å ha ringt denne funksjonen, avhenger av attributtene som er tilordnet den når den opprettes. Hvis en tråd opprettes med standardattributtene, kan den kanselleres.

Avbryt -attributtene til en tråd kan hentes med Pthread_SetCancelState () -funksjonen og kan settes med Pthread_SetCanceltType ().

Hvis Pthread_Cancel () -funksjonen er vellykket, returnerer den 0 som resultat. Hvis den mislykkes, returnerer den en ikke -verdisk verdi.

Pthread_Cancel () -funksjonen fra PThread -biblioteket er definert i “Tråden.h ”header. For å bruke denne og de andre trådstyringsfunksjonene, må du ta med denne overskriften i programmet ditt som følger:

#inkludere

Programmene som bruker trådstyringsfunksjonene må samles ved å ringe trådbiblioteket fra Linux -kommandolinjen. Ellers vil feilene oppstå.

Følgende er en spesiell seksjon som forklarer hvordan du kan samle programmene som bruker funksjonene fra trådbiblioteket riktig.

Hvordan avbryter en løpende tråd ved hjelp av PTHREAD_CANCEL () -funksjonen på C -språk

I dette eksemplet oppretter vi en tråd med Pthread_Create () -funksjonen og avbryter den deretter midt i utførelsen med Pthread_Cancel () -funksjonen.

For å gjøre dette, oppretter vi "Thread_1" -tråden som utfører th_function () -funksjonen som består av en for sløyfe med 10 sykluser, som hver skriver ut “Sekunder fra init -tråden og antall sekunder gikk setning i kommandokonsollen. Etter det blir en forsinkelse på 1 sekund satt inn for å gjenta syklusen igjen. Så utførelsestiden for tråden er omtrent 10 sekunder.

Når tråd_1 er opprettet og kjører, introduserer vi en 5-sekunder. For å avslutte tråden, kaller vi Pthread_Cancel () -funksjonen og passerer tråden_1 -identifikatoren som returneres av PThread_Create () -funksjonen som inngangsargument når tråden opprettes. La oss nå se på koden for dette eksemplet:

#inkludere
#inkludere
#inkludere
#inkludere
void * th_function (void * n);
tomrom ()

pthread_t thread_1;
pthread_create (& thread_1, null, & th_function, null);
søvn (5);
pthread_cancel (thread_1);
søvn (5);

/******************************************************** *****/
tomrom * th_function (void * n)

for (int sec = 0; sek!= 10; sek ++)

printf ("sekunder fra init tråd %i \ n", sek);
søvn (1);

Følgende bilde viser samlingen og utførelsen av koden. Som du kan se, avsluttes tråden med Pthread_Cancel () -funksjonen midt i utførelsen eller 5 sekunder etter starten:

I dette tilfellet aksepterer tråden avbestillingen fordi attributtene er satt til standard ved oppretting ved å spesifisere en nullpeker i "attr" inngangsargumentene til pthread_create () -funksjonen.

Feil i bruken av Pthread_Cancel () -funksjonen: Hva er de og hvordan de skal identifisere dem

Måten å avgjøre om en feil oppstår når du ringer denne funksjonen er å bruke en "if" -tilstand der inngangstilstanden er et ikke-null returresultat. Følgende er et kodebit som bruker denne metoden for feildeteksjon:

if (pthread_cancel (tråd) != 0)
printf ("Det oppstod en feil med å prøve å avbryte den spesifiserte tråden");

Den eneste feilen denne funksjonen kan generere er den som er definert som ISRCH i “Errno.h ”header. Denne feilen genereres når en ikke-eksisterende tråd refereres til i inngangsargumentet til Pthread_Cancel () -funksjonen.

Samlingsfeil i programmer med tråder

Når du sammenstiller GCC -programmene som bruker tråder, kan samlingen mislykkes hvis det ikke gjøres riktig fra kommandolinjen.

Den vanligste feilmeldingen som er utstedt av kompilatoren sier at en av trådfunksjonene som vi refererer til i koden ikke er definert.

Disse feilene resulterer ofte i å kaste bort verdifull tid ved å sjekke overskriftene som vi satte inn i koden, deres integritet og katalogene som er tilknyttet kompilatoren siden alt indikerer at problemet er der.

Selv om funksjonene som forårsaker feilen er definert i “Pthread.h ” header og er inkludert i koden, kompilatoren gjenkjenner ikke disse funksjonene med mindre Pthread -biblioteket kalles fra kommandolinjen under samlingen.

Du kan se på grønt den riktige måten å ringe PThread -biblioteket fra kommandokonsollen under sammenstilling av programmer med tråder i det følgende:

~ $ gcc -pthread bane/filnavn.c -o out_name

Som vi kan se i følgende figur, forsvinner feilen når Pthread -biblioteket kalles under sammenstilling:

Konklusjon

I denne Linux -hint -artikkelen viste vi deg hvordan du bruker Pthread_Cancel () -funksjonen for å be systemet om å avslutte en løpende tråd.

Vi så på en teoretisk beskrivelse av denne funksjonen og viste deg syntaks, inngangs- og utgangsargumenter, og hvilken type data som hver av dem godtar. Etter det implementerte vi det vi lærte gjennom et praktisk eksempel med kodebiter og bilder der vi har sett hvordan Pthread_Cancel () -funksjonen fungerer på C -språket.

Vi la også til en spesiell seksjon der vi viste deg hvordan du kan samle programmene som inneholder trådene og funksjonene fra Pthread -biblioteket riktig.