【问题标题】:Thread local storage with __declspec(thread) fails in C++/CLI带有 __declspec(thread) 的线程本地存储在 C++/CLI 中失败
【发布时间】:2010-09-18 11:52:51
【问题描述】:

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

__declspec(thread) int lastId = 0;

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

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

【问题讨论】:

    标签: .net c++ multithreading interop


    【解决方案1】:

    好像__declspec(thread) isn't supported by CLR

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

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

    有很多关于这种差异的文章。这只是为了让您入门。

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

    【讨论】:

      【解决方案2】:

      很遗憾,不支持。这是一个带有解决方法的博客条目:

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

      【讨论】:

        猜你喜欢
        • 2011-07-01
        • 1970-01-01
        • 2014-06-01
        • 1970-01-01
        • 2011-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多