我想模擬非靜態成員線程局部變量,像這樣:模擬線程局部變量
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'變量 – MRB
使用這種模式'T mData [tNumThread];'如果sizeof(T)<64或128.否則會造成MESI協議造成的巨大瓶頸。 –