【发布时间】:2014-04-22 12:26:11
【问题描述】:
我有一个名为 WCThreadSpecificPrivateData 的小类。 其实现:
class WCThreadSpecificPrivateData
{
public:
WCThreadSpecificPrivateData();
~WCThreadSpecificPrivateData();
void* GetData();
void SetData(void*);
protected:
uint32_t m_DataKey;
};
WCThreadSpecificPrivateData::WCThreadSpecificPrivateData():m_DataKey(0)
{
m_DataKey = ::TlsAlloc();
}
void* WCThreadSpecificPrivateData::GetData()
{
void* retVal = 0;
if (0 != m_DataKey)
retVal = ::TlsGetValue(m_DataKey);
return retVal;
}
void WCThreadSpecificPrivateData::SetData(void* in_data)
{
if (0 != m_DataKey)
::TlsSetValue(m_DataKey, in_data);
}
我用它来存储指向名为 TargetSpecificData 的线程特定结构的指针。 在某些时候,我决定使用 boost::thread_specific_ptr 来代替这个类。它对我有用,但是,我的性能急剧下降。一切都变得更慢了。
我检查了 boost 实现(适用于 Windows),发现它也是通过 TlsGetValue 和 TlsSetValue 调用实现的,所以我预计会有大致相同的行为。有人可以提出导致这种下降的原因吗?
【问题讨论】: