Avatar von foobar
  • foobar

mehr als 1000 Beiträge seit 10.01.2000

"Static Initialization Order Fiasco"? Das Destruction-Fiasco ist viel größer!

Hat man eine Applikation mit vielen detached Threads, ist das Destruction Fiasko viel größer: Ruft ein Thread exit() auf, dann werden Destruktoren der globalen Variablen aufgerufen während andere Threads noch damit arbeiten. Resultat sind sporadische Abstürze beim Beenden des Programms.

Ich löse das inzwischen so, daß ich keine globalen Variablen mehr anlege, die einen Konstruktor benötigen. Stattdessen gibt es nur noch globale Pointer, die bei der ersten Nutzung (per Mutex geschützt) initialisiert werden. Beim Beenden werden sie nicht freigegeben, sondern das Aufräumen überlasse ich dem OS. Das behebt sowohl das Problem der Reihenfolge bei der Initialisierung als auch Abstürze beim Beenden.

Bewerten
- +