在多线程频繁切换的过程中使用互斥锁,信号量等会出现什么问题?

在多线程频繁切换的过程中使用互斥锁(mutex)、信号量(semaphore)等同步原语,虽然可以保证线程安全,但也可能引发一系列性能或逻辑问题。以下是常见问题及原因:

一、常见问题

1. 频繁上下文切换导致性能下降

现象:

  • 每次线程在等待锁时都会让出 CPU,操作系统需要保存/恢复线程上下文。
  • 多线程频繁竞争锁,会导致系统频繁进行上下文切换(context switch)

后果:

  • CPU 时间花在“切换”而非“执行”上。
  • 系统吞吐量降低,响应变慢。

2. 锁竞争严重

现象:

  • 多个线程频繁尝试获取同一把锁,尤其在临界区很小却访问很频繁时。

后果:

  • 大量线程阻塞排队,造成“性能瓶颈”。
  • 某些线程可能长时间抢不到锁(饥饿)。

3. 死锁(Deadlock)

现象:

  • 两个或多个线程互相等待对方释放锁,永远卡住。

示例:

// 线程 A 拿到锁 1 等待锁 2,线程 B 拿到锁 2 等待锁 1
pthread

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

嵌入式面试八股文全集 文章被收录于专栏

这是一个全面的嵌入式面试专栏。主要内容将包括:操作系统(进程管理、内存管理、文件系统等)、嵌入式系统(启动流程、驱动开发、中断管理等)、网络通信(TCP/IP协议栈、Socket编程等)、开发工具(交叉编译、调试工具等)以及实际项目经验分享。专栏将采用理论结合实践的方式,每个知识点都会附带相关的面试真题和答案解析。

全部评论
锁竞争咋办
点赞 回复 分享
发布于 2025-07-31 13:40 北京

相关推荐

合适才能收到offe...:项目岗是什么岗?我看你有段好像跟策划运营相关,如果找运营的话第三段经历写详细点儿。 个人建议是把自我评价删了换成专业技能放在工作经验上或者下面。学生会那个也可以删,把第一个包装成店铺运营,写4-6给点。第三个也是写4-6个点。注意工作内容➕部分数据。 投递的时候BOS招呼用语改一下,换成我有xx工作经验,熟练掌握xx技能样式,也可以简历截图然后直接发送。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务