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

封装std::thread时出现异常行为,请求排查代码或测试问题

C++线程池ThreadObject封装问题排查

ThreadObject核心设计

  • 内部用std::thread实例mThread存储线程
  • 用非原子bool变量mIsFree标记线程空闲状态(知晓std::atomic<bool>更优,但认为谨慎处理下当前选择可行)
  • 用std::mutex实例mThreadObjectMutex保护线程对象

构造、赋值与析构逻辑

  • 无参构造函数:仅将mIsFree设为true,未加锁
  • 删除拷贝构造与拷贝赋值运算符(线程对象不可拷贝)
  • 移动构造与移动赋值运算符:等待线程空闲后swap mThread
  • 析构函数:仅执行线程join操作

核心任务执行函数

  • execute函数:接收std::function<void()>类型任务,执行前将mIsFree设为false,任务结束后设为true;若线程处于忙碌状态则等待
  • join函数:用于显式调用线程join

Google Test测试异常情况

  • 模拟任务通过sleepForSeconds函数实现(循环等待指定时长)
  • 移动构造测试:启动线程执行1秒任务,等待0.5秒后触发移动构造,预期耗时0.5秒,但实际耗时为0
  • execute函数测试:连续执行两次1秒任务,第一次执行0.5秒后调用第二次execute,预期耗时0.5秒但实际为0,且后续isThreadFree的判断结果不符合预期
  • 特殊现象:不使用sleepForSeconds等待时,所有测试均正常

疑问

当前代码是否存在错误?还是测试用例本身有问题?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 01:19:50