代码之家  ›  专栏  ›  技术社区  ›  EFrank

在C++/CLI中,线程本地存储与

  •  5
  • EFrank  · 技术社区  · 17 年前

    我正在研究一个项目,我们通过C++/CLI层来混合.NET代码和本机C++代码。在此解决方案中,我希望通过uu declspec(thread)声明使用线程本地存储:

    __declspec(thread) int lastId = 0;
    

    但是,在第一次访问变量时,我会得到一个nullreferenceexception。 更准确地说,声明是在 托管类 (在C++/CLI中实现的.NET类)。

    我已经读过一些关于udeclspec(线程)不适用于延迟加载的DLL的内容。 如果我使用.NET,是否自动使用延迟加载的DLL?

    2 回复  |  直到 15 年前
        1
  •  6
  •   Bogdan Maxim    15 年前

    似乎uuu declspec(螺纹) isn't supported by CLR .

    记住.NET线程不是必需的本地线程, but can be also fibers ,所以线程的标准API不适用于它们。

    如果您有托管类,那么应该使用托管线程API thread local storage .

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

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

        2
  •  4
  •   Bruce    17 年前

    很遗憾,不支持。以下是一篇包含解决方法的博客:

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

    推荐文章