我正在开发一个项目,我们通过C ++ / CLI层混合.NET代码和本机C ++代码。在这个解决方案中,我想通过__declspec(线程)声明使用线程本地存储:
__declspec(thread) int lastId = 0;
但是,在第一次访问变量时,我得到一个NullReferenceException。 更确切地说,声明是在 ref class (在C ++ / CLI中实现的.NET类)中完成的。
我已经阅读过有关__declspec(thread)的内容与延迟加载的DLL不兼容。 如果我使用.NET,我会自动使用延迟加载的DLL吗?
答案 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