Getrennte Threads in einer Threading-Leere
Bei der Multithread-Programmierung werden getrennte Threads auch dann weiter ausgeführt, wenn sie von ihrem ursprünglichen Besitzer-Thread getrennt wurden . Dies wirft die Frage auf: Was passiert mit getrennten Threads, die noch ausgeführt werden, wenn der Hauptthread beendet wird?
Die Standardantwort
Der C-Standard (N3797) bleibt stumm über das Schicksal getrennter Threads, wenn main() beendet wird. Weder Abschnitt 1.10 (Programmbeendigung) noch Abschnitt 30.3 (Threads) definieren das Verhalten explizit.
Trotz dieser Auslassung wird allgemein davon ausgegangen, dass getrennte Threads weiterlaufen, bis sie ihre Ausführung abgeschlossen haben. Diese Annahme ergibt sich aus der Tatsache, dass Threads Einheiten sind, die vom Betriebssystem gesteuert werden und möglicherweise nicht vom Hauptthread des Programms beendet werden.
Potenzielle Gefahren
Allerdings ist es möglich, getrennte Threads zuzulassen Threads auf unbestimmte Zeit fortzusetzen, kann zu undefiniertem Verhalten führen, wenn diese Threads auf Variablen oder statische Objekte zugreifen, die zu anderen Threads gehören, oder statische Objekte berühren, nachdem statische Objekte zerstört wurden abgeschlossen.
Insbesondere besagt der C-Standard (Abschnitt 1), dass, nachdem alle Thread-Objekte zerstört wurden und die Ausführung aller potenziellen Signalhandler abgeschlossen ist, der einzige zulässige Code der ist, der in Signalhandlern zulässig ist (z. B. , die
Außergewöhnliche Ansätze
Um undefiniertes Verhalten zu verhindern, während getrennte Threads noch ausgeführt werden, wenn main() beendet wird, können Entwickler übernehmen einer von zwei Ansätzen:
Fazit
Obwohl der C-Standard das Verhalten von getrennten Objekten nicht explizit definiert Wenn main() Threads beendet, kann daraus gefolgert werden, dass sie bis zum Abschluss weiter ausgeführt werden. Entwickler sollten sich der damit verbundenen potenziellen Gefahren bewusst sein und geeignete Maßnahmen (manuelles Verbinden oder Sicherheit des Signalgebers) ergreifen, um undefiniertes Verhalten zu vermeiden.
Das obige ist der detaillierte Inhalt vonWas passiert mit getrennten Threads, wenn der Hauptthread in C beendet wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!