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

简易Mutex锁CPU占用及单CPU多线程场景问题咨询

typedef int lock_variable_type;

inline void lock(lock_variable_type *lock_variable)
{ 
    asm volatile (""::: "memory");
    while (*lock_variable);
    *lock_variable = 1;
}

inline void release(lock_variable_type *lock_variable)
{ 
    asm volatile (""::: "memory");
    *lock_variable = 0;
}

inline void init_lock(lock_variable_type *lock_variable)
{ 
    asm volatile (""::: "memory");
    *lock_variable = 0;
}

问题1:多个线程共用该类型的锁是否会造成CPU资源浪费

会。该锁是典型的忙等自旋锁,线程拿不到锁时不会主动让出CPU调度权,会持续在空循环里反复读取锁变量的值做判断,全程没有任何有效业务输出,纯占用CPU做无用功。如果锁持有时间较长、竞争线程多,会导致大量CPU算力被空转线程白白消耗。

问题2:单CPU多线程多任务场景下使用该锁除竞态外的其他问题

还会导致系统整体运行效率大幅下降:

  • 单CPU同一时间只能运行一个线程,当持有锁的线程被系统调度切出CPU后,所有等待锁的线程拿到时间片就会进入空转状态,直到时间片耗尽被切走,全程没有任何有效产出
  • 空转的等待线程会挤占持有锁线程的调度资源,导致持有锁的线程更难拿到CPU运行、更晚释放锁,形成“等锁的白占CPU、持锁的拿不到CPU”的恶性循环,极端情况下整个场景的处理效率会比不加锁还低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:15:02