主线程 main 退出后,全局变量 mutex 没有在子线程销毁后才销毁(析构)。

问题的核心在于:主线程 main 退出后,detach 出去的子线程(由 C RT 托管)和全局静态变量(生命周期由 CRT 托管)的析构顺序究竟是怎样的?

翻阅了一遍 CRT 源码,没有找到两者先后关系的明确说明。

但根据这里的示例给出的答案来看:main 函数 return 之后,detach 出去的子线程的结束发生在全局静态变量析构之后。

吐槽:为什么会是这个顺序?CRT 的设计者不会没有考虑过这种情况吧?

全局静态变量并不属于某个 thread 所有,为了避免出错,理应等所有 thread 结束之后才析构(销毁)全局静态变量。