執行緒本地儲存

可以使用 thread_local 關鍵字建立執行緒本地儲存。用 thread_local 說明符宣告的變數據說具有執行緒儲存持續時間。

  • 程式中的每個執行緒都有自己的每個執行緒區域性變數的副本。
  • 具有函式(本地)作用域的執行緒區域性變數將在控制元件第一次通過其定義時初始化。除非宣告 extern,否則這樣的變數是隱式靜態的。
  • 具有名稱空間或類(非本地)作用域的執行緒區域性變數將作為執行緒啟動的一部分進行初始化。
  • 執行緒終止時銷燬執行緒區域性變數。
  • 如果類的成員是靜態的,則它只能是執行緒本地的。因此,每個執行緒將有一個該變數的副本,而不是每個(執行緒,例項)對一個副本。

例:

void debug_counter() {
    thread_local int count = 0;
    Logger::log("This function has been called %d times by this thread", ++count);
}