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

32位编译的sem_timedwait示例在64位系统配libasan时超时异常

sem_timedwait 在先调用 sem_post 时超时(32位 ASAN 环境下)

问题复现

基于Ubuntu Focal在线手册的sem_timedwait示例修改代码后,出现异常:

  • 测试场景:通过sleep确保sem_post先于sem_timedwait调用,且用sem_getvalue验证信号量计数已增至1
  • 预期结果:sem_timedwait立即返回成功
  • 实际结果:sem_timedwait触发超时

复现环境

该问题在以下环境中均能稳定复现:

  • 禁用WSL的Docker Ubuntu 20.04(g++9 multilib)容器
  • 全新安装的WSL Debian 9(g++6 multilib)
  • WSL Ubuntu 20.04(g++9 multilib)
  • Hyper-V上的Ubuntu 20.04虚拟机

已执行apt update更新系统包,也曾卸载g9改用g10(对应libasan.so.6),问题未得到解决。

编译与运行差异

针对test_sem.cpp的编译测试结果:

  • 带-m32和libasan编译:运行后出现非预期超时
  • 不带-m32编译:运行符合预期,sem_timedwait立即成功
  • 带-m32但不带libasan编译:运行符合预期,sem_timedwait立即成功

额外尝试

为排查问题,进行了以下尝试,均未解决:

  • 用线程替代信号触发sem_post,问题仍存在
  • 使用sem_clockwait(分别指定CLOCK_REALTIME和CLOCK_MONOTONIC时钟),问题仍存在

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 18:46:12