当前位置: 首页 > news >正文

[001]从操作系统层面看锁的逻辑

从操作系统层面,锁 (Lock) 是一种同步机制,用于控制多个线程或线程对共享资源的访问,防止竞态条件(race condition).常见的锁包括互斥锁(mutex)、读写锁(read-write lock)、自旋锁(spinlock)等。下面逐一分析其原理,从内核实现,CPU指令,调度机制等角度解释。

1.互斥锁(Mutex)

 原理

 作用:确保同一时刻只有一个线程/进程访问临界区。

实现机制:基于原子操作和睡眠/唤醒机制。

操作系统实现细节

1.用户态尝试加锁(快速路径):

         通常用 原子CAS (Compare-And-Swap) 尝试将锁状态从“未占用”变为已经占用。

        成功则进入临界区,失败则进入下一步。

2. 内核态挂起(慢路径):

        如果锁被占用,则线程被阻塞,进入等待队列(入Linux的futex队列)

        等待唤醒时才尝试重新加锁。

3.解锁时唤醒等待线程

        解锁线程将锁状态置为 未占用 并唤醒一个或者多个等待线程。

Linux示例:

         Linux 中pthread_mutex实际使用了futex(fast userspace mutex)

        futex 运行用户态,快速获取锁,失败时才陷入内核挂起,避免频繁陷入内核态。

二、自旋锁(Spinlock )

原理

不会挂起线程,而是获取不到锁时,持续循环检查锁状态(“忙等待”)

适用于临界区非常短、线程不会被长时间阻塞的场景(如内核中断上下文)

实现方式

使用原子质量(如xchg,cmpxhcg)实现加锁

CPU指令层级提供如LOCK CMPXCHG来保证总线原子性。

缺点

占用CPU资源,等待时间线程无法做其他工作。

多核系统上会导致缓存一直性流量(chache coherence traffice)增加。

三、读写锁(Read-Write Lock)

原理

允许多个读者共享访问,但写者必须独占。

优化了读多写少的场景。

实现机制

通常维护一个计数器记录读者数量。

写线程必须等待所有读者释放锁后才能进入。

内核或者用户态原子操作与条件变量管理状态

操作系统支持

POSIX提供pthread_rwlock ,Linux 内部实现使用类似rw_semaphore.

四、信号量(Semaphore)

原理

计数信号量可控制对资源的访问数量

二值信号量可以作为互斥锁的替代。

实现机制

内核维护一个计数器,P (wait) 操作将其减一,若<0则阻塞;V(signal )操作将其加一,唤醒等待线程

五、实现关键点:从硬件到内核

 

层级关键点
CPU提供原子操作:CMPXCHG,XCHG,LL/SC (ARM/MIPS)
缓存一致性确保多核之间对锁变量的访问保持一致(MESI协议)
内核调度器维护等待队列,挂起线程,唤醒线程
系统调用用户态锁失败后,通过futex进入内核挂起

六、总结与对比

锁类型是否阻塞线程性能场景
互斥锁较好通用
自旋锁否(忙等)非常高(短临界区)内核、无阻塞上下文
读写锁优于互斥(读多)多读少些场景
信号量适中计数共享资源控制

相关文章:

  • 【大模型面试每日一题】Day 33:深度解析GPT-3与PaLM的规模扩展差异及影响
  • 有机黑鸡蛋与普通鸡蛋:差异剖析与选购指南
  • 《Effective Python》第六章 推导式和生成器——避免在推导式中使用超过两个控制子表达式
  • Compose原理 - 整体架构与主流程
  • 基于Python学习《Head First设计模式》 第一章 策略模式
  • 2025年全国青少年信息素养大赛复赛C++算法创意实践挑战赛真题模拟强化训练(试卷3:共计6题带解析)
  • stm32——SPI协议
  • JDK21深度解密 Day 8:Spring Boot 3与虚拟线程整合
  • JVM 核心组件深度解析:堆、方法区、执行引擎与本地方法接口
  • 【课堂笔记】标签传播算法Label Propagation Algorithm(LPA)
  • VMware-workstation安装教程--超详细(附带安装包)附带安装CentOS系统教程
  • 在QT中,利用charts库绘制FFT图形
  • 安装win11之后,电脑经常会跳出“无法在此设备上加载驱动程序”的提示。无法加载的驱动程序分别为“pcdsrvc_x64.pkms”“iqvw64e.sys”
  • 学习海康VisionMaster之表面缺陷滤波
  • 在 RK3588 上通过 VSCode 远程开发配置指南
  • MySQL访问控制与账号管理:原理、技术与最佳实践
  • 软件工程方法论:在确定性与不确定性的永恒之舞中寻找平衡
  • Redis 常用数据类型和命令使用
  • Linux环境搭建MCU开发环境
  • MCP架构全解析:从核心原理到企业级实践
  • 响应式网站需要单独的网址吗/百度seo白皮书
  • 做网站有虚拟服务器/有没有免费的推广网站
  • 公司做网站发生的费用分录/国外浏览器搜索引擎入口
  • 锚文本外链网站/好的seo平台
  • 教育在线网站怎样做直播/资源链接搜索引擎
  • 网站开发包含上线吗/网络seo营销推广