Даже если Windows Thread Pool не создаст свои собственные потоки, в вашем процессе всегда могут быть гости. Антивирусное программное обеспечение, программное обеспечение для управления, расширения оболочки, программное обеспечение для обеспечения доступности ... или даже вредоносное ПО.
Ключевая проблема здесь заключается в том, что thread_local
создается уже при запуске потоков.
Вы можете помочь, сделав их конструктор constexpr только с инициализацией stati c, а затем выполнить любой динамический c материал.
Или обернуть свои thread_local
объекты std::optional
, и построить их, когда они нужны вам самим. Или создайте свою собственную обертку для этого.
Я понимаю, что все это обходные пути, и решением было бы то, что MSV C задержит создание локальной переменной потока. Но я доволен обходными путями. Если нет, отправьте отзыв MS.
В конечном счете, задерживая создание объекта thread_local
, вы также оптимизируете: вы не создаете объект для потоков, в которых ваш код никогда не будет работать.