Niech ta globalna funkcja cierpią statycznej inicjalizacji fiasko?
Nie, nie będzie. Jesteś bezpieczny ... :-)
Cytowanie C++ standardowy projekt (kopalnia nacisk) ...
$6.7: 4:Dynamiczny inicjalizacji zmiennej bloku z zakresu statycznej czas przechowywania ([podstawowy .stc.static]) lub przechowywanie wątków czas trwania ([basic.stc.thread]) jest wykonywany po raz pierwszy kontrola przechodzi przez swoją deklarację; taką zmienną uważa się za zainicjowaną po zakończeniu jej inicjalizacji. Jeśli inicjalizacja kończy się przez zgłoszenie wyjątku, inicjalizacja nie jest zakończona , więc zostanie wypróbowana ponownie, gdy następna kontrola przejdzie do deklaracji . Jeśli kontrola wchodzi deklarację jednocześnie gdy zmienna jest inicjowana, równoczesne wykonanie musi poczekać na zakończenie inicjalizacji
Zobacz również: Static local variables
Ponieważ funkcja jest szablonem funkcji template <typename TFn>
, dla każdego oddzielnego wystąpienia (podstawienie TFn
), zostanie ocenione
Niepowiązana nitpick: zauważ, że twoja zmienna NThread będzie istniała dla każdego odróżnienia Implementacja ct szablonu funkcji. – rubenvb