Heim >Backend-Entwicklung >C++ >Was passiert mit getrennten Threads, wenn die Funktion „main()' in C beendet wird?
Was passiert, wenn getrennte Threads Main() überleben?
In C können Threads mit detach() getrennt werden, sodass sie ausgeführt werden können unabhängig vom std::thread-Objekt, das sie ursprünglich erstellt hat. Das Verhalten des Standards für getrennte Threads beim Beenden von main() bleibt jedoch unklar.
Standard-Stille und implizite Effekte
Weder Abschnitt 1.10 noch 30.3 des C 14-Entwurfs explizit definiert das Schicksal getrennter Threads, wenn main() beendet wird. Diese Mehrdeutigkeit führt zu mehreren Fragen:
Das Fehlen expliziter Richtlinien legt nahe, dass das Auslaufen von main() mit getrennten Threads definierte Auswirkungen haben muss, da das Stoppen der getrennten Threads detach() im Wesentlichen bedeutungslos machen würde.
Implizite Einschränkungen
Während der Standard nicht explizit angibt, was mit getrennten Threads passiert, bietet er einige an Einschränkungen:
Beitritt Getrennte Threads
Die Frage, ob getrennte Threads jemals zusammengefügt werden können, wird in der Antwort ebenfalls behandelt. Die Antwort zeigt, dass getrennte Threads tatsächlich mithilfe der *_at_thread_exit-Funktionsfamilie (notify_all_at_thread_exit(), std::promise::set_value_at_thread_exit() usw.) verbunden werden können.
Abschwächung von undefiniertem Verhalten
Um undefiniertes Verhalten zu vermeiden, wenn main() Beenden Sie Exits mit laufenden getrennten Threads. Erwägen Sie die folgenden Strategien:
Fazit
Obwohl der C-Standard das Verhalten getrennter Threads beim Beenden von main() nicht explizit definiert, bietet er Einschränkungen und Implikationen, die darauf hindeuten definierte Effekte. Durch die Einhaltung dieser Einschränkungen und die Verwendung der Funktionsfamilie *_at_thread_exit können Programmierer mit getrennten Threads umgehen und undefiniertes Verhalten vermeiden.
Das obige ist der detaillierte Inhalt vonWas passiert mit getrennten Threads, wenn die Funktion „main()' in C beendet wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!