当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《使用__declspec(线程)的线程本地存储在C++/CLI中失败》经验,为你挑选了1个好方法。

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

__declspec(thread) int lastId = 0;

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

我已经阅读了一些关于__declspec(线程)的内容与延迟加载的DLL不兼容.如果我使用.NET,我是否自动使用延迟加载的DLL?



1> Bogdan Maxim..:

看来CLR不支持 __declspec(thread).

请记住,.net线程不是必需的本机线程,但也可以是光纤,因此线程的标准API不适用于它们.

如果您有托管类,则应使用托管线程API进行线程本地存储.

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

作为提示:您可以使用ThreadStatic属性而不是TLS来提高性能.如果您使用的是ASP.NET应用程序,则需要记住有关TLS的一些内容.

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有