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

Rust线程池代码调整后出现请求阻塞问题求解

问题原因分析

核心问题出在MutexGuard的作用域差异上:

  • 原代码写法:

    let job = rx.lock().unwrap().recv().unwrap();
    job();
    

    这里rx.lock().unwrap()返回的MutexGuard是临时值,仅在执行recv()的过程中存在。当recv()完成并把任务赋值给job后,这个临时的MutexGuard会立即被销毁,Mutex随之解锁。此时其他线程可以正常获取锁,处理新的请求。

  • 修改后的写法:

    rx.lock().unwrap().recv().unwrap()();
    

    链式调用下,MutexGuard的作用域覆盖了整个表达式的生命周期——从调用lock()开始,直到最后的任务执行完毕(也就是那5秒睡眠结束)。这意味着在任务执行的5秒内,Mutex一直处于锁定状态,其他线程无法获取锁来接收新的请求,自然就会阻塞到锁被释放为止。

简单总结:原写法是「拿锁→取任务→放锁→执行任务」,修改后变成「拿锁→取任务→执行任务→放锁」,执行任务的过程中锁没释放,导致其他线程抢不到锁处理新请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 19:25:27