使用__declspec(线程)的线程本地存储在C ++ / CLI中失败

时间:2008-10-22 07:44:39

标签: .net c++ multithreading interop

我正在开发一个项目,我们通过C ++ / CLI层混合.NET代码和本机C ++代码。在这个解决方案中,我想通过__declspec(线程)声明使用线程本地存储:

__declspec(thread) int lastId = 0;

但是,在第一次访问变量时,我得到一个NullReferenceException。 更确切地说,声明是在 ref class (在C ++ / CLI中实现的.NET类)中完成的。

我已经阅读过有关__declspec(thread)的内容与延迟加载的DLL不兼容。 如果我使用.NET,我会自动使用延迟加载的DLL吗?

2 个答案:

答案 0 :(得分:6)

似乎__declspec(线程)isn't supported by CLR

请记住.net线程不是必需的本机线程but can be also fibers,因此线程的标准API不适用于它们。

如果您有托管类,则应使用thread local storage的托管线程API。

有很多关于这种差异的文章。这只是为了让你开始。

作为提示:您可以使用ThreadStatic属性而不是TLS来改进performance。如果您正在使用ASP.NET应用程序,则需要记住有关TLS的some things

答案 1 :(得分:4)

不幸的是不支持。这是一个博客条目,其中包含一个解决方法:

http://blogs.msdn.com/jeremykuhne/archive/2006/04/19/578670.aspx