執行緒本地儲存 TLS

2021-04-16 01:21:22 字數 688 閱讀 1195

執行緒本地儲存 (tls) 是乙個方法,通過該方法,給定的多執行緒程序中的每個執行緒都可以分配儲存執行緒特定資料的位置。動態繫結(執行時)執行緒特定資料是通過 tls api(

tlsalloc

、tlsgetvalue

、tlssetvalue

和tlsfree

)的方式支援的。除了現有的 api 實現,win32 和 visual c++ 編譯器現在還支援靜態繫結(載入時間)基於執行緒的資料。

tls 的 api 實現

執行緒本地儲存是通過 win32 api 層和編譯器實現的。有關更多資訊,請參見 win32 api 文件中的

tlsalloc

、tlsgetvalue

、tlssetvalue

和tlsfree

。 visual c++ 編譯器提供了乙個關鍵字(而不通過 api 層)使 tls 操作更加自動化。將在下一節(tls 的編譯器實現)描述此語法。

tls 的編譯器實現

為了支援 tls,已將新屬性 thread 新增到了 c 和 c++ 語言,並由 visual c++ 編譯器支援。此屬性是乙個擴充套件儲存類修飾符,如上一節中所述。使用 __declspec 關鍵字宣告 thread 變數。例如,以下**宣告了乙個整數執行緒區域性變數,並用乙個值對其進行初始化:

__declspec( thread ) int tls_i = 1;

執行緒本地儲存

對於多執行緒程式,所有執行緒共享全域性和靜態變數,任何執行緒使用變數之後都會在其他執行緒可見,因此對於執行順序非常重要的場景,需要使用多重方式來進行同步確保執行緒安全。但是,如果希望每個執行緒單獨擁有乙個全域性或靜態變數,所有執行緒都可以使用它,但是在每個執行緒中是單獨儲存的,那麼就需要使用執行緒本...

執行緒本地儲存 declspec thread

執行緒本地儲存 thread local storage,tls 簡單分析與使用 在多執行緒程式設計中,同乙個變數,如果要讓多個執行緒共享訪問,那麼這個變數可以使用關鍵字volatile進行宣告 那麼如果乙個變數不想使多個執行緒共享訪問,那麼該怎麼辦呢?呵呵,這個辦法就是tls,執行緒本地儲存.它的...

vc中線程的本地儲存

執行緒的本地儲存 tls tls的作用 當多個執行緒使用同乙個全域性或者靜態變數的時候 由於各個執行緒會各自對該變數賦值操作,那麼資料會被 不同的執行緒覆蓋,即這些變數對於執行緒只有乙個副本。為了各自執行緒儲存各自的資料,所以引入了tls,一旦使用了 tls,變數會對各個執行緒產生不同的副本,各個執...