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

概念理解篇:线程同步之【互斥】

线程同步基本概念:

首先我们知道线程同步分为线程互斥线程通信

线程同步的意思就是确保多个线程按正确的顺序去获取资源并依次执行。

线程互斥的意思就是同一时刻只有一个线程可以访问共享资源(临界区),防止共享资源被多个线程同时访问造成数据覆盖从而崩溃。

------------------------今天我们只讲的概念和过程----------------------------

互斥:

主要分为互斥锁自旋锁

互斥锁又名:无忙等待锁,获取失败就放手了,闲的很。

自旋锁又名:忙等待锁,获取失败就一直while循环嘛,忙的很。

什么是互斥锁与自旋锁?

多线程编程中,这两把锁都是被线程获取后用来互斥访问共享资源的,同一时刻保证临界区只有一个线程去访问。

互斥锁与自旋锁的过程?

共同特性:

这两种锁,被线程获取成功后,只要当前线程不释放,其他线程就无法获取。

不同特性:

互斥锁加锁失败:内核把线程从运行态变为阻塞态,并放入等待队列中,把当前线程的CPU资源转让给其他线程,等到当前线程又获取到锁后,线程由阻塞态恢复就绪态,操作系统执行调度算法,把CPU资源转回给当前线程,继续任务的执行。

自旋锁加锁失败:当前线程会一直占有CPU资源进行循环等待,直到能获取到这把锁。

综上所述,两种锁的主要区别就是获取互斥锁的线程存在状态改变,也就是两次上下文切换。

什么时候使用互斥锁还是自旋锁?

当临界区也就是共享资源代码量比较少,线程持有锁的时间短,可以使用自旋锁,这样避免使用互斥锁(线程状态的变化从而进行两次上下文切换)提高效率。(CPU多核前提下)

注意:单核CPU不能使用自旋锁,因为获取自旋锁的线程不会放弃CPU资源,其他线程无法获取CPU。

http://www.lqws.cn/news/190747.html

相关文章:

  • 《0/1背包》题集
  • 飞马LiDAR500雷达数据预处理
  • AOSP (Android11) 集成Google GMS三件套
  • 大模型时代的“思考“与“行动“:人工智能的认知革命
  • STM32标准库-TIM输出比较
  • iview Switch Tabs TabPane 使用提示Maximum call stack size exceeded堆栈溢出
  • 《深度体验 Egg.js:打造企业级 Node.js 应用的全景指南》
  • ardupilot 开发环境eclipse 中import 缺少C++
  • Splash动态渲染技术全解析:从基础到企业级应用(2025最新版)
  • 麒麟v10系统的docker重大问题解决-不支持容器名称解析
  • 【机械视觉】Halcon—【八、形态学调整和生成棋盘格】
  • MDP的 Commands模块
  • MS31912TEA 多通道半桥驱动器 氛围灯 照明灯 示宽灯 转向灯驱动 后视镜方向调节 可替代DRV8912
  • 在 Caliper 中执行不同合约的方法
  • 应用分享 | 精准生成和时序控制!AWG在确定性三量子比特纠缠光子源中的应用
  • Java学习——正则表达式
  • 09.三数之和
  • vm虚拟机添加虚拟机无反应,获取所有权
  • 在WPF项目中集成Python:Python.NET深度实战指南
  • 无人机定位系统技术设计与难点突破!
  • 接口限频算法:漏桶算法、令牌桶算法、滑动窗口算法
  • 智能生成完整 Java 后端架构,告别手动编写 ControllerServiceDao
  • 如何实现安卓端与苹果端互通的多种方案
  • 好子集的数目概念及表达形式
  • 每次clone都会有:Enter passphrase for key ‘/Users/xxx/.ssh/id_rsa‘:
  • [蓝桥杯]迷宫与陷阱
  • 排序算法总结(C++)
  • ansible和saltstack安装和简单操作
  • Python训练营打卡DAY46
  • EtherNet/IP转DeviceNet协议网关详解