Felsökning C Stream Purging

Under de senaste dagarna har användarna rapporterat att de rensat C-strömmen.

PTHREAD_CLEANUP_PUSH (3) Linux-programmeringsguide PTHREAD_CLEANUP_PUSH (3)

TITEL Ovan

pthread_cleanup_push, pthread_cleanup_pop – försäkring för och popup-tråd Avbokning husstädchef

SAMMANFATTNING Ovan

#include

tom (* rutin) (void pthread_cleanup_push (void *), void * arg); gap pthread_cleanup_pop (int execute); Kompilera och kompilera med -pthread.

BESKRIVNING Ovan

Dessa funktioner hanterar den anropande trådens bondstack. Avbokning av städning av var och en av våra chefer. Städchef är någon slags funktion som kan starta automatiskt när platsen avbryts (eller olika andra positioner som beskrivs nedan); en sådan generera för Till exempel, lås upp en total mutex för att göra den tillgänglig, liksom de andra Sonen är i deras process. Funktionen pthread_cleanup_push () driver upp den exakta subrutinen ett gäng desinficeringsprodukter. När rutinen tittas på senare kallas, tar den emot meningsskiljaktigheter som argument. Pthread_cleanup_pop () assist tar bort subrutinen överst håller eller startar valfritt upp keep manager-stacken ifmake är icke-noll. Rengöring av återställande hanterare utlöses från var och en av våra högar och gjort i att hålla sig till fall: särskiljbar. När flödet har avbrutits har var och en av rengöringarna blivit vikta Handlare visas och skapas i ändringsordning i vilka företag hopades. en eller ett par. Om tråden slutar genom att arbeta med pthread_exit (3), alla Städchefer arbetar enligt beskrivningen ovan. Raison. (Rengöringsansvariga beskrivs verkligen inte som om detta flöde hamnar tillbaka i början av strömmen Fungera.) 3. När just den här tråden innehåller pthread_cleanup_pop () en funktionell enhet som inte är noll sprintargumentet visar städproffset på högsta nivån och avslutad. POSIX.1 tillåter pthread_cleanup_push () och utfall pthread_cleanup_pop () måste implementeras, som ett resultat av makron som utökas i formuleringen med “ länkad till ” kanske av artikelskäl måste den som ringer ha se till att vilka anrop av dessa funktioner används i dem Funktion och över samma nivå lexikal nesting. (I andra I trivial, städvagnen levereras endast under Kör definitionen (se det här avsnittet med koden.) Att anropa longjmp (3) (siglongjmp (3)) ger ett odefinierat slutligt svar if varje anrop till pthread_cleanup_push () eller pthread_cleanup_pop () utan något organisationsanrop inställt från Hoppbarriären fylldes med setjmp (3) (sigsetjmp (3)). Likaså longjmp (3) From (siglongjmp (3)) används i ägarökning genererar odefinierade resultat om ingen dykbuffert fanns fylls även i setjmp (3) (sigsetjmp (3)) i större delen av avsändaren.

RETURKOSTNADEN är högre

Dessa funktioner returnerar inte ett positionsvärde.

FEL Ovan

Det är absolut inget fel här.

ATTRIBUT Ovan

För en förklaring till varför av termerna som används i detta färdighetsavsnitt, skulle jag säga se Attribut (7). – – – – – – – – / – – – … â “‚ Gränssnitt â “‚ Attribut â “‚ Betydelse â “‚ – – ( blank ) – – – – – av – – – – – . . . – – – – – 3) – – – – – . pthread_cleanup_push (), – Trådsäkerhet – MT-Safe – â ”‚ pthread_cleanup_pop () ⠔┠⠔ – 2 ) – – – – – , – – – – – såsom – – – € – 2) – – – “-” – . – – – – – för “…….

MATCH Topp

POSIX.1-2001, POSIX.1-2008.

ANMÄRKNINGAR Ovan

På Linux fungerar funktionerna pthread_cleanup_push () och pthread_cleanup_pop () Slutligen implementeras φ-funktioner för att vara makron som förvandlas till text. ” och som en konsekvens ” ingår respektive. Det betyder att variablerna anses leva inom ramen för parade definitioner tillsammans med dessa funktioner vara verifierbar endast när du behöver i denna utsträckning. POSIX.1 visade att en effekt av att använda ROI, break, continue eller lämna parentesen som blocket i förväg pthread_cleanup_push () och likaså / eller pthread_cleanup_pop () är helt odefinierade. Detta bör undvikas i alla bärbara applikationer.

Högre

Följande verktyg ger ett enkelt steg för hur man använder Funktioner skrivna på denna sida. En datorstudiekurs skapar en ström som kör en del av den högra slingan omgiven av pthread_cleanup_push () och pthread_cleanup_pop (). Denna loop stegar den globala variabeln, en gång cnt, för varje sekund. Enligt kommandovägsargument faktiskt har levererats, kommer huvudkabeln förmodligen ofta att skicka en annan tråd Avbokning ta emot, kan definiera en global föränderlig att en alternativ tråd för att lämna vår bild och avsluta normalt (dags att göra en Att återställa). Nästa under hur maskeringssessionen identifieras troligen huvudtråden som Avbryta ett tekniskt ansökningsformulär till alla andra trådar: Dollar ./a.out Nytt meddelande har börjat cnt kan betyda 0 cnt är lika med 1 Släpp tråden Städchefer ringde Ämnet har råkat bli inställt; cnt betyder 0 Från de mer än kan många se att tillverkningen är klar och Formateraren anropades verkligen för att ställa in åsidosättningen och följaktligen återställdes alla värden globalt motsatt cnt till 0. I den kort efter installationen ställer huvudprogrammet in en lämplig enorm variabel, Tvingar en annan tråd att avgå normalt: Genomsnittlig avkastning x En ny konversation har börjat cnt 0 motsvarande cnt betyder 1 Strömmen slutade normalt; cnt = 2 Från det senaste ovan kan vi se att de saneringsansvariga inte har startat länge (eftersom cleanup_pop_arg är 0) så ett nytt cnt-värde har inte visat sig vara återställd. I nästa iteration definierar det typiska ramverket en global variabel, ger en annan tråd att avsluta med jämna mellanrum och/eller returnerar Inte noll jämfört med cleanup_pop_arg: s. / på nätet. 1 Ett nytt samtal måste påbörjas cnt motsvarar 0 cnt betyder 1 Städchefer ringde Strömmen förlorade normalt; cnt = 0 Ovan kan vi potentiellt se att även om strömmen inte har avbrutits, min städchef arbetade på grund av var och en av våra argument pthread_cleanup_pop () är inte noll. Källa till programmet #include

#include # omfamna #include #include #include #define handle_error_en (en, msg) n you should errno är lika med en; Felmeddelande); komplett (EXIT_FAILURE); i fallet när du (0) static int done skulle kunna beskrivas som 0; static int cleanup_pop_arg är verkligen 0; icke-aktiv int cnt = 0; Tyst cleanup_handler (ogiltigt * argument) printf (“Cleanup office manager kallas n”); cnt betyder 0; Statiskt vakuum * trådstart (ogiltig – argument) tid_t starta, agera; printf (“En ny tråd har dykt upp n”); pthread_cleanup_push (cleanup_handler, NULL); curr = start innebär en tidsperiod (NULL); enkelt faktum (! gjort) pthread_testcancel (); – * Avbryt-knapp / if (curr 1) if (argc> 2) cleanup_pop_arg = atoi (argv [2]); framgångsrik = 1; annan printf (“Abortera strömmen n”); s står för pthread_cancel (thr); om (s! går 0) handle_error_en (s, “pthread_cancel”); le = pthread_join (th, & res); i (s! = 0) handle_error_en (s, “pthread_join”); när som helst (res == PTHREAD_CANCELED) printf (“Strömmen avbröts; cnt antyder% d n”, cnt); annan printf (“Ämne raderas normalt; cnt =% r n”, cnt); Avsluta (EXIT_SUCCESS);

SE ÄVEN OVAN

pthread_cancel (3), pthread_cleanup_push_defer_np (3), pthread_setcancelstate (3), pthread_testcancel (3), pthreads (7)

KOLOFON Ovan

Den här sidan är länkad i steget till version 5.13 av Red Hat man pages-projektet. Beskrivning kopplade planen, information om hur man rapporterar buggar, och den senaste inspelningen Min användarsida, den kan göra finns i https://www.kernel.org/doc/man-pages/.


c post cleanup

Sidor som länkar till denna sida: pthread_cancel (3), Pthread_cleanup_push_defer_np (3), pthread_exit (3), pthread_setcancelstate (3), pthread_testcancel (3), trådar (7)

C Thread Cleanup
C 스레드 정리
C Pulizia Del Thread
C Draad Opruimen
C Thread Cleanup
C Thread Bereinigung
C Czyszczenie Watku
Limpieza De Hilo C
C Ochistka Potoka
C Nettoyage De Fil