В моем коде есть несколько мест, где статический объект функции создается один раз, а затем используется (копируется) при каждом вызове этой функции. Одна из этих функций может быть вызвана из любого потока. Функция не имеет доступа ни к какому общему состоянию, кроме этого статического объекта.
Когда поток 1 вызывает функцию в первый раз, объект создается и инициализируется. Однако (по счастливой случайности) у меня есть повторяющийся случай, когда программа переключается на поток 2 и вызывает ту же функцию до завершения инициализации. Объект назначен и используется с неверными данными!
Я не знаю, как с этим справиться. Я использую критические секции в коде инициализации, но проблема даже не в этом. Этот объект используется до инициализации в первую очередь.
Я попытался сделать этот поток локальным, используя __declspec(thread), но, по-видимому, это не работает для объектов.
Я мог бы просто окружить все это критическим разделом, и, возможно, это лучшее решение, но меня беспокоят подобные проблемы, возникающие в других частях кода — было бы неплохо иметь общее решение.