质疑MFC中的线程局部存储代码
CNoTrackObject* CThreadLocalObject::GetData(CNoTrackObject* (*pfnCreateObject)())
{ if(m_nSlot == 0)
{ if(_afxThreadData == NULL)
_afxThreadData = new(__afxThreadData) CThreadSlotData;
m_nSlot = _afxThreadData->AllocSlot();
}
CNoTrackObject* pValue = (CNoTrackObject*)_afxThreadData->GetThreadValue(m_nSlot);
if(pValue == NULL)
{ // 创建一个对象,此对象的成员会被初始化为0
pValue = (*pfnCreateObject)();
// 使用线程私有数据保存新创建的对象
_afxThreadData->SetValue(m_nSlot, pValue);
}
return pValue;
}
多个线程进入会存在多次调用_afxThreadData = new(__afxThreadData) CThreadSlotData;
由于afxThreadData是全局变量,这里有线程安全问题?