3 回答

TA貢獻(xiàn)1810條經(jīng)驗 獲得超4個贊
線程本地存儲在各個方面都像靜態(tài)(=全局)存儲一樣,只是每個線程都具有對象的單獨副本。對象的生命周期從線程啟動(對于全局變量)或首次初始化(對于塊局部靜態(tài)變量)開始,并在線程結(jié)束(即,何時join()調(diào)用)時結(jié)束。
因此,只能將也可以聲明的變量static聲明為thread_local,即全局變量(更確切地說:“在命名空間范圍內(nèi)”的變量),靜態(tài)類成員和塊靜態(tài)變量(在這種情況下static隱含)。
例如,假設(shè)您有一個線程池,并且想知道您的工作負(fù)載平衡得如何:
thread_local Counter c;
void do_work()
{
c.increment();
// ...
}
int main()
{
std::thread t(do_work); // your thread-pool would go here
t.join();
}
這將打印線程使用情況統(tǒng)計信息,例如使用以下實現(xiàn):
struct Counter
{
unsigned int c = 0;
void increment() { ++c; }
~Counter()
{
std::cout << "Thread #" << std::this_thread::id() << " was called "
<< c << " times" << std::endl;
}
};
- 3 回答
- 0 關(guān)注
- 645 瀏覽
添加回答
舉報