diese globale Funktion Kann aus statischer Initialisierung Fiasko leiden?
Nein, würde es nicht. Sie sind sicher ... :-)
der C++ Standardentwurf (Hervorhebung von mir) Zitiert ...
$6.7: 4:Dynamische Initialisierung eines Block-scope Variable mit statischen Lagerdauer ([Grund .stc.static]) oder Threadspeicher Dauer ([basic.stc.thread]) wird beim ersten Mal durchgeführt geht durch seine Deklaration; Eine solche Variable wird als betrachtet, die nach Abschluss ihrer Initialisierung initialisiert wird. Wenn die Initialisierung durch Auslösen einer Ausnahme beendet wird, ist die Initialisierung nicht abgeschlossen, daher wird es beim nächsten Mal erneut versucht, wenn die Steuerung die Deklaration eingibt. Wenn die Steuerung die Deklaration gleichzeitig eintritt, während die Variable initialisiert wird, die gleichzeitige Ausführung wird für den Abschluss der Initialisierung warten
Auch sehen: Static local variables
Da Ihre Funktion eine Funktion Vorlage ist template <typename TFn>
Für jede separate Instantiierung (Substitution TFn
) wird static const unsigned int NThread = std::thread::hardware_concurrency();
ausgewertet
Unverwandter Nitpick: Beachten Sie, dass Ihre NThread-Variable für jede Unterteilung existiert Instanziierung der Funktionsvorlage. – rubenvb