我想了解TLS是如何工作的,但我認爲維基百科和MSDN提供的定義是不同的。線程本地存儲功能
通過閱讀維基百科頁面,我的理解是,TLS是映射數據的一種方式,通常對於進程的每個線程而言,這些數據通常是全局/靜態的。如果這是真的,但不同的線程不能訪問其他線程的數據。
根據MSDN:「一個線程分配索引,其他線程可以使用該索引檢索與索引關聯的唯一數據」,因此看起來線程可以訪問其他線程的數據。
這似乎與維基百科所說的內容形成了鮮明的對比,哪裏出了問題?
我想了解TLS是如何工作的,但我認爲維基百科和MSDN提供的定義是不同的。線程本地存儲功能
通過閱讀維基百科頁面,我的理解是,TLS是映射數據的一種方式,通常對於進程的每個線程而言,這些數據通常是全局/靜態的。如果這是真的,但不同的線程不能訪問其他線程的數據。
根據MSDN:「一個線程分配索引,其他線程可以使用該索引檢索與索引關聯的唯一數據」,因此看起來線程可以訪問其他線程的數據。
這似乎與維基百科所說的內容形成了鮮明的對比,哪裏出了問題?
兩個混淆這裏:
簡而言之,TLS的工作方式類似於C++映射。關鍵是一對線程ID和TLS ID。數據通常是一個可用於間接引用某些數據的指針。訪問元素時,只提供TLS ID,實現會添加調用線程的ID以形成查找的密鑰。不用說,訪問該地圖當然是線程安全的。
因此,假設thread_1的TLS中鏈接了另一個線程的對象的鍵,thread_1可以修改它,對吧? – badnack 2015-03-18 00:08:17
取決於你的意思是什麼樣的關鍵。不幸的是,在我的回覆中,我在兩種不同的背景下使用了這個術語,但現在應該修復。 – 2015-03-18 06:30:43
當引用外部信息時,鏈接它們總是一個好主意。 – alk 2015-03-14 11:19:59
相關:http://stackoverflow.com/q/21015738/694576 – alk 2015-03-15 07:45:25