ordine di inizializzazione di thread_local rispetto alle variabili globali

ordine di inizializzazione di thread_local rispetto alle variabili globali

Userò la bozza di lavoro C++20 poiché la formulazione è un po' più pulita, sebbene nessuna delle regole reali sia cambiata.

Innanzitutto, thread_local si comporta fondamentalmente come static per quanto riguarda il non locale:[basic.stc.thread]/2:

Sì, è una nota. Ma un oggetto non locale ha dichiarato thread_local è fondamentalmente static quindi questo ha senso.

Ora, né globalthread hanno un'inizializzazione costante, quindi entrambi sono inizializzati a zero e quindi devono essere sottoposti all'inizializzazione dinamica. A [basic.start.dynamic]!

Nessuna delle nostre variabili sono specializzazioni, nessuna delle due è in linea. Quindi entrambi sono ordinati .

Le nostre dichiarazioni non sono ordinate l'una rispetto all'altra.

Va bene, sub-punto elenco 1:

Non si applica. È una condizione complicata, ma non si applica.

No, nessun thread.

Eccoci. global e thread sono in sequenza indeterminata.

Nota anche che:

e: