我正在研究从.dll运行的游戏引擎。里面,有一个导出函数,返回到它声明的静态类的引用,象下面这样:C++多线程 - 线程安全代码
__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”是当然初始化的STATE
类的CRITICAL_SECTION
成员。我使用这些功能的上下文是:
NF3DGetEngineState()->Set(10);
现在的问题是:此代码线程安全吗?
从我所知道的,返回对静态声明的引用不是线程安全的。
我该怎么做才能做到这一点?
请解释你为什么认为它不是线程安全的 –
我听说,对静态声明的返回引用不是线程安全的吗?我对吗? –
你在用'ClassMember'做什么?您需要在设置时使用相同的资源保护。 – JeffRSon