【问题标题】:Global variables not destructed in main thread?全局变量在主线程中没有被破坏?
【发布时间】:2011-03-31 11:25:58
【问题描述】:

我有一个混合模式的可执行文件,我注意到我的本地全局变量的构造函数在主线程中被调用,而析构函数在其他线程中被调用。
线程的名称是'Thread::intermediateThreadProc'。

这是什么原因?这个 'Thread::intermediateThreadProc' 线程是什么?

谢谢。

【问题讨论】:

  • 全局变量是本地的还是托管的?
  • 本地的,我更新了问题

标签: c++ multithreading visual-c++ global-variables mixed-mode


【解决方案1】:

Thread::intermediateThreadProc() 是 CLR 中的一个小辅助函数,用作 CLR 启动的任何线程的线程启动函数。在 SSCLI20 源代码中找到它,src\vm\threads.cpp

在另一个线程上看到这个运行是意料之中的。卸载 appdomain 时运行清理代码。它的 CLR 逻辑非常复杂,但看起来它会在 appdomain 最后一次运行终结器线程以清理堆时运行。您可以假设所有托管对象都已死,并且没有其他线程在运行。请注意,您的代码会受到两秒终结器线程超时的影响。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-22
    • 2020-02-15
    • 1970-01-01
    • 2020-12-12
    • 2022-01-06
    • 2012-07-24
    • 2017-06-29
    • 2013-11-16
    相关资源
    最近更新 更多