Darf diese globale Funktion unter statischer Initialisierung leiden?
Nein, würde es nicht. Du bist sicher ...: -)
Zitieren des C ++ Standardentwurfs (Hervorhebung meins) ...
$ 6.7: 4: Dynamische Initialisierung einer Block-Scope-Variablen mit Statische Speicherdauer ([basic.stc.static]) oder Threadspeicher Dauer ([basic.stc.thread]) wird beim ersten Mal ausgeführt geht durch seine Erklärung; Eine solche Variable wird berücksichtigt nach Abschluss der Initialisierung initialisiert. Wenn die Initialisierung beendet durch Auslösen einer Ausnahme, die Initialisierung ist nicht vollständig, so dass es beim nächsten Mal, wenn die Steuerung eintritt, erneut versucht wird die Erklärung. Wenn das Steuerelement gleichzeitig die Deklaration eingibt während die Variable initialisiert wird, die gleichzeitige Ausführung muss auf den Abschluss der Initialisierung warten
Siehe auch: Statische lokale Variablen
Da Ihre Funktion eine Funktionsvorlage template <typename TFn>
ist, wird TFn
für jede separate Instanziierung (Substitution von static const unsigned int NThread = std::thread::hardware_concurrency();
) ausgewertet
Tags und Links c++ multithreading c++11 static static-order-fiasco