在多线程频繁切换的过程中使用互斥锁,信号量等会出现什么问题?
在多线程频繁切换的过程中使用互斥锁(mutex)、信号量(semaphore)等同步原语,虽然可以保证线程安全,但也可能引发一系列性能或逻辑问题。以下是常见问题及原因:
一、常见问题
1. 频繁上下文切换导致性能下降
现象:
- 每次线程在等待锁时都会让出 CPU,操作系统需要保存/恢复线程上下文。
- 多线程频繁竞争锁,会导致系统频繁进行上下文切换(context switch)。
后果:
- CPU 时间花在“切换”而非“执行”上。
- 系统吞吐量降低,响应变慢。
2. 锁竞争严重
现象:
- 多个线程频繁尝试获取同一把锁,尤其在临界区很小却访问很频繁时。
后果:
- 大量线程阻塞排队,造成“性能瓶颈”。
- 某些线程可能长时间抢不到锁(饥饿)。
3. 死锁(Deadlock)
现象:
- 两个或多个线程互相等待对方释放锁,永远卡住。
示例:
// 线程 A 拿到锁 1 等待锁 2,线程 B 拿到锁 2 等待锁 1 pthread
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
嵌入式面试八股文全集 文章被收录于专栏
这是一个全面的嵌入式面试专栏。主要内容将包括:操作系统(进程管理、内存管理、文件系统等)、嵌入式系统(启动流程、驱动开发、中断管理等)、网络通信(TCP/IP协议栈、Socket编程等)、开发工具(交叉编译、调试工具等)以及实际项目经验分享。专栏将采用理论结合实践的方式,每个知识点都会附带相关的面试真题和答案解析。

vivo公司福利 691人发布