智在千里 2020-05-27 20:04 采纳率: 0%
浏览 150
已结题

一段C++代码我怎么看都不像 线程阻塞,实际运行后确实阻塞了,求解答

void IDecode::Update(XData pkt) {
    if (pkt.isAudio != isAudio) {
        return;
    }
    XLOGI("更新数据%d   %d", pkt.data, pkt.size);
    while (!isExit) {
        packsMutex.lock();

        //阻塞
        if (packs.size() < maxList) {
            //生产者
            packs.push_back(pkt);
            packsMutex.unlock();
            break;
        }
//        XLOGI("线程阻塞了吗%d   %d", pkt.data, pkt.size);
        packsMutex.unlock();

    }
}

这个方法运行在一个线程中,不断地被调用。我实际测了一下packs.size() < maxList的值是false的时候,线程就阻塞,该方法不再被调用。false情况下,也是线程加锁解锁的过程,我看不出来哪里阻塞了求解答。

  • 写回答

1条回答 默认 最新

  • threenewbee 2020-05-27 23:08
    关注

    packsMutex.lock();
    这里就是阻塞,如果有别的thread调用了packsMutex.lock,这里会挂起等待,直到unlock

    评论

报告相同问题?

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么