【发布时间】:2013-10-24 11:00:40
【问题描述】:
我想为非静态成员模拟线程局部变量,像这样:
template< typename T, unsigned int tNumThread >
class ThreadLocal
{
private:
protected:
T mData[tNumThread];
unsigned int _getThreadIndex()
{
return ...; // i have a threadpool and each thread has an index from 0 to n
}
public:
ThreadLocal() {};
~ThreadLocal() {};
T& operator ->()
{
return mData[_getThreadIndex()];
}
...
};
但问题是线程数将在运行时确定,我必须从堆中分配mData。
我想知道有没有什么办法不使用堆分配而使用像上面这样的常规数组?
【问题讨论】:
-
编译器通常会提供扩展语法来执行此操作。您需要提及您的编译器名称和版本。
-
@HansPassant 如果我没记错的话,在 VS 中我们有
_declspec(thread)和 c++11 中的threadlocal但它们适用于Static变量,我想要ThreadLocals用于non-static变量 -
如果 sizeof(T) T mData[tNumThread];。否则会造成由 MESI 协议引起的大瓶颈。
标签: c++ multithreading thread-local