C++ 筆記 線程局部變量 thread_local

c++11 中添加了新的關鍵字thread_local,用來聲明新的存儲期(線程存儲期變量),即線程局部變量。


程序中的所有對象擁有下列存儲期之一:

1 自動存儲期。對象的存儲在外圍代碼塊開始時分配,而在結束時解分配。除了聲明爲 static 、 extern 或 thread_local 的所有局部對象擁有此存儲期。
2 靜態存儲期。對象的存儲在程序開始時分配,而在程序結束時解分配。只存在對象的一個實例。所有聲明於命名空間作用域(包含全局命名空間)的對象,加上聲明帶有 static 或 extern 的對象擁有此存儲期。
3 線程存儲期。對象的存儲在線程開始時分配,而在線程結束時解分配。每個線程擁有其自身的對象實例。唯有聲明爲 thread_local 的對象擁有此存儲期。 thread_local 能與 static 或 extern 一同出現,以調整鏈接。
4 (C++11 起)動態存儲期。通過使用動態內存分配函數,由請求分配和解分配對象的存儲。

thread_local修飾的變量具有如下特性:

  • 變量在線程創建時生成(不同編譯器實現略有差異,但在線程內變量第一次使用前必然已構造完畢)。
  • 線程結束時被銷燬(析構,利用析構特性,thread_local變量可以感知線程銷燬事件)。
  • 每個線程都擁有其自己的變量副本。
  • thread_local可以和static或extern聯合使用,這將會影響變量的鏈接屬性。

關於鏈接屬性,參考以下資料:

https://blog.csdn.net/luoshabugui/article/details/86699001

https://www.cnblogs.com/magicsoar/p/3840682.html

https://blog.csdn.net/Hansry/article/details/80207143


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章