Рассмотрим следующий сценарий. У нас есть функция C ++ со статической локальной переменной:
void function()
{
static int variable = obtain();
//blahblablah
}
функция должна вызываться из нескольких потоков одновременно, поэтому мы добавляем критический раздел, чтобы избежать одновременного доступа к статическому локальному:
void functionThreadSafe()
{
CriticalSectionLockClass lock( criticalSection );
static int variable = obtain();
//blahblablah
}
но этого будет достаточно? Я имею в виду магию, которая делает инициализацию переменной не более одного раза. Таким образом, есть некоторые служебные данные, поддерживаемые средой выполнения, которые указывают, была ли инициализирована каждая статическая локальная локальная среда.
Будет ли критическая секция в приведенном выше коде защищать также данные службы? Требуется ли дополнительная защита для этого сценария?