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

常见的三种锁

一、互斥锁

互斥锁 Mutex 保证在任意时刻只有一个线程能够进入被保护的临界区。当一个线程获取到互斥锁后,其他线程若要进入临界区就会被阻塞,直到该线程释放锁。

互斥锁是一种阻塞锁,当线程无法获取到锁时,会进入阻塞状态。

应用场景上,互斥锁适用于临界区资源访问时间较长或存在阻塞操作的情况。

二、自旋锁

自旋锁 spinlock 保证当一个线程发现自旋锁被其他线程占用时,它会一直循环等待而不进入阻塞状态,直到该自旋锁可用(该期间内只会检测锁的状态)。

自旋锁是一种非阻塞锁,线程在等待锁期间会一直占用 CPU 资源进行循环检测。

应用场景上,自旋锁适用于临界区资源访问时间短,其线程竞争不激烈的情况。

三、读写锁

读写锁允许多个线程同时对共享数据进行读操作,但只允许单个线程进行写操作。

当有线程正在写入时,其他线程无法进行读操作,防止数据不一致性。

读写锁允许多个线程并发读,但只能允许单个线程进行写操作,写操作时需要独占锁,阻塞其他线程的读写操作。

应用场景上,读写锁适用于读操作原远多于写操作的场景,可以提高并发读性能。

相关文章:

  • shiro550-cve-2016-4437复现
  • Java数据结构第二十期:解构排序算法的艺术与科学(二)
  • 2025 - GDB 盲调笔记--调试 “无调试符号“ “无调试信息“ 的三方程序
  • MyBatis-Plus分页控件使用及使用过程发现的一个坑
  • 从0开始的操作系统手搓教程31:完成硬盘驱动程序
  • 恋爱循环2025年3月9日
  • 基于RNN+微信小程序+Flask的古诗词生成应用
  • C语言学习day25:WinAPI编程进阶07-游戏辅助时钟周期事件、定时器消息
  • 带宽计算公式
  • clickhouse源码分析
  • 顺序栈和链式栈的使用
  • 内存管理——页表、页表项、页目录、多级页表
  • 【大模型知识点】位置编码——绝对位置编码,相对位置编码,旋转位置编码RoPE
  • 【CXX】6.2 Rust::Str 公共 API
  • MySQL中的`JSON_EXTRACT`函数
  • Anthropic 平台升级,解锁 Claude3.7Sonnet 与 prompt 创作新玩法
  • SPI驱动(六) -- SPI_OLED上机实验(使用spidev)
  • 梯度计算中常用的矩阵微积分公式
  • 计算机网络----主要内容简介
  • Qwen2.5-7B-Instruct进行自我认知微调
  • 开发微信微网站建设/网店推广的渠道有哪些
  • js网站源码下载/免费的客户资源怎么找
  • 国内课题组建设常用网站/线下引流推广方法
  • 网站建设最贵多少钱/重庆seo外包平台
  • 做网站便宜/收录情况
  • 用织梦系统做的2个网站要把它都上传到服务器上吗/seo自动点击排名