2009-11-23 62 views

回答

4

TLS在新代碼中肯定會很有用。如果你想要一個全局變量,它必須是每個線程的特定變量(例如C/C++中的errno),那麼線程本地存儲就是要走的路。

+1

java.text.DateFormat就是一個很好的例子。您可以重用它,但它不是線程安全的,因此每次安全使用DateFormat而不創建新的一種好方法是將其存儲在ThreadLocal中。 – cjstehno 2009-11-23 18:22:52

0

這幾天errno通常放在線程本地存儲。

在某些情況下(例如:需要啓動代碼的DLL等共享庫)使用線程本地存儲會成爲問題。

1

線程特定的單例對象?一個多線程Web服務器,其中每個線程處理一個請求,一些TLS數據的可能性相當大(如請求URL或某些數據庫連接,如果需要,本質上某些資源可用於請求處理過程中的任何時間點),以便在需要時可以輕鬆訪問代碼中的任何地方。

+0

omfg的S字... :( – 2010-08-25 06:39:16

+0

Singleton。Global。相同的區別。 – 2012-10-22 16:53:13

0

我只需要它爲特定線程錯誤處理和優化(在C):

__thread int cpfs_errno; 
static __thread struct Cpfs *g_cpfs; 

在這個例子中,這節省了我路過的struct Cpfs *上下文指針經過幾十個功能,其中它永遠不會改變。