Я работаю над игровым движком, который работает с .dll. Внутри есть экспортированная функция, которая возвращает ссылку на объявленный в ней статический класс, как показано ниже:
__forceinline __declspec(dllexport) STATE* NF3DGetEngineState(void)
{
static STATE s_State;
return &s_State;
}
где STATE
— это класс, который управляет всеми компонентами и имеет функции, которые обращаются к ним через критическую секцию:
void Set(int val)
{
EnterCriticalSection(&CriticalSection);
ClassMember = val;
LeaveCriticalSection(&CriticalSection);
}
где «CriticalSection» — это CRITICAL_SECTION
член класса STATE
, который, конечно же, инициализирован. Контекст, в котором я использую эти функции:
NF3DGetEngineState()->Set(10);
Вопрос в том, является ли этот код потокобезопасным?
Из того, что я узнал, возврат ссылок на статические объявления не является потокобезопасным.
Что я могу сделать, чтобы это было так?
ClassMember
? При настройке необходимо использовать ту же защиту ресурсов. - person JeffRSon   schedule 23.10.2015