C++11 Динамическая инициализация и уничтожение с параллелизмом (магическая статика)

Изучаю С++ по документу:

https://ru.cppreference.com/w/cpp/compiler_support/11

В этой таблице (документ) есть пункт Динамическая инициализация и уничтожение с параллелизмом (магическая статика) по ссылкам:

https://ru.cppreference.com/w/cpp/language/storage_duration#.D0.A1.D1.82.D0.B0.D1.82.D0.B8.D1.87.D0.B5.D1.81.D0.BA.D0.B8.D0.B5_.D0.BB.D0.BE.D0.BA.D0.B0.D0.BB.D1.8C.D0.BD.D1.8B.D0.B5_.D0.BF.D0.B5.D1.80.D0.B5.D0.BC.D0.B5.D0.BD.D0.BD.D1.8B.D0.B5

https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2660.htm

в одной из ссылок идет описание thread_local - хотя описание thread_local дано в предыдущем пункте документа C++11 Локальная память потока.

У меня туговато пока с английским, можно простыми словами объяснить - о чем речь в изменении С++11 Динамическая инициализация и уничтожение с параллелизмом (магическая статика)?


Ответы (1 шт):

Автор решения: Serge3leo

Обсуждение посвящено следующему вопросу, на примере кода:

...
    if(c) {
        static T s;
        thread_local T t;
        ...
    }
...

Будут ли вызваны конструкторы, и если будут, то когда.

До C++11 thread_local вообще не было, а некоторые потенциально возможные реализации конструктора s, на "чистом" C++98, конфликтовали со сложившейся практикой использования C++ в рамках POSIX или Windows многопоточных программ.

А в C++11 этот вопрос изложен по-новому и более строго.

→ Ссылка