踩坑一处(GCC)STL `std::async` 实现BUG导致的crash问题
原文中文,约16800字,阅读约需40分钟。
📝
内容提要
最近发现使用新版本的opentelemetry-cpp时出现崩溃问题。崩溃位置在std::future析构的地方,由std::async创建。经分析发现是GCC STL实现的一个BUG,已通过修复PR解决。建议绕过该BUG,避免使用该功能。
🎯
关键要点
-
近期发现使用新版本的opentelemetry-cpp时偶现崩溃问题。
-
崩溃发生在std::future析构时,由std::async创建的future导致。
-
分析发现是GCC STL实现的一个BUG,已通过修复PR解决。
-
建议绕过该BUG,避免使用相关功能。
-
崩溃栈显示尝试join的线程已经为空,导致异常。
-
相关代码逻辑在收集上报指标时使用子线程执行导出。
-
问题可能与线程安全的边界条件有关,需进一步分析。
-
修复PR已推送并合入,项目组已接入修复版本。
❓
延伸问答
使用opentelemetry-cpp时崩溃的原因是什么?
崩溃是由于std::async创建的std::future在析构时触发的GCC STL实现的一个BUG。
如何解决opentelemetry-cpp中的崩溃问题?
建议绕过该BUG,避免使用相关功能,并使用已修复的版本。
崩溃发生在哪个代码位置?
崩溃发生在std::future析构时,具体是在尝试join的线程已经为空的情况下。
这个BUG的修复进展如何?
相关的修复PR已经推送并合入,项目组已接入修复版本。
崩溃问题可能与哪些因素有关?
问题可能与线程安全的边界条件有关,需要进一步分析。
在使用std::async时需要注意什么?
在使用std::async时,需注意避免使用可能导致崩溃的功能,尤其是在GCC STL实现中。
🏷️