2008-10-22 50 views
5

我正在研究一個項目,我們通過C++/CLI層混合了.NET代碼和本機C++代碼。在這個解決方案,我想通過__declspec(線程)聲明使用線程本地存儲:使用__declspec(線程)的線程本地存儲在C++/CLI中失敗

__declspec(thread) int lastId = 0; 

然而,在變量的第一次訪問,我得到一個NullReferenceException。 更準確地說,聲明是在ref class(在C++/CLI中實現的一個.NET類)內完成的。

我已經閱讀了一些關於__declspec(線程)不適用於延遲加載的DLL。 如果我使用.NET,我會自動使用延遲加載的DLL嗎?

回答

6

看來,__declspec(線程)isn't supported by CLR

請記住,.net線程並不是本地線程,but can be also fibers,因此線程的標準API不適用於它們。

如果你有一個託管類,那麼你應該使用託管線程API的thread local storage

有很多關於這種差異的文章。這只是爲了讓你開始。

作爲提示:您可以使用ThreadStatic屬性而不是TLS來改進performance。如果您正在使用ASP.NET應用程序,則需要記住有關TLS的some things