You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++20代码死锁排查请求及在线编译器推荐(GCC12.1无输出)

问题解答

代码是否存在死锁?

这段代码不存在典型死锁场景,但存在严重的未定义行为,这才是导致无输出的核心原因:

  • std::counting_semaphore<1> 的模板参数1限定了该信号量的最大许可数为1,但构造时传入的初始值是2,违反了C++标准要求(初始许可数不得超过最大许可数),触发未定义行为。
  • 这种未定义行为可能导致程序启动即崩溃、卡死或逻辑混乱,自然无法正常输出内容。

修正方案:将信号量的最大许可数改为2(即std::counting_semaphore<2> prepareSignal(2);),或者将初始许可数调整为不超过1的数值。修正后程序逻辑可正常运行:prepareWork释放1个许可,两个completeWork线程分别获取许可执行后续操作。

推荐的在线编译器

  • GCC系列:选用支持C++20的GCC 12及以上版本的在线编译工具,可准确复现问题,报错信息直观
  • Clang系列:对C++标准的兼容性和严格性更优,适合排查未定义行为类问题
  • MSVC系列:用于验证代码在Windows编译器下的运行表现,覆盖跨平台场景

内容的提问来源于stack exchange,提问作者Mangy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 09:55:22