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

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

线程同步基本概念:

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

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

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

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

互斥:

主要分为互斥锁自旋锁

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

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

什么是互斥锁与自旋锁?

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

互斥锁与自旋锁的过程?

共同特性:

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

不同特性:

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

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

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

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

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

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

http://www.xdnf.cn/news/913951.html

相关文章:

  • PyQt6 GUI应用程序开发实操指南
  • 布林波动率策略
  • 算法学习之——LRU最近最少使用
  • 告别数据泥沼,拥抱智能中枢:King’s四位一体重塑科研生产力
  • 负载均衡器 LB》》
  • ABB输入/输出系统- S800输入/输出AI830A
  • 场景题-3
  • 【Linux】sed 命令详解及使用样例:流式文本编辑器
  • 【网页端数字人开发】基于模型SAiD实现嘴型同步
  • 三模冗余设计
  • 书籍推荐 --- 《筚路维艰:中国经济社会主义路径的五次选择》
  • 瑞它鲁肽 Retatrutide
  • Delphi 实现远程连接 Access 数据库的指南
  • 为什么HDI叠孔比错孔设计难生产
  • 调试时两个can盒子互连实现在一台电脑上自发自收的接线
  • Pytorch安装后 如何快速查看经典的网络模型.py文件(例如Alexnet,VGG)(已解决)
  • WiFi通信应用开发【保姆级】+配置ESP8266芯片的WiFi station和soft-AP + station工作模式!!!
  • 算力时代的四大引擎:CPU、GPU、NPU、DPU 深度解析
  • Vue3 + threeJs 定义六种banner轮播图切换动画效果:百叶窗、手风琴、拼图、渐变、菱形波次、圆形扩展
  • 如何利用 Redis 实现跨多个无状态服务实例的会话共享?
  • 讲解:Java I/O 流体系,并举例每个类的使用
  • 【YOLOs-CPP-图像分类部署】05-OpenVino加速
  • URL 带有 /../ 导致可以访问其他目录--路径穿越问题
  • SON.stringify()和JSON.parse()之间的转换
  • 优化电脑的磁盘和驱动器提高电脑性能和延长硬盘寿命?
  • Unity3D仿星露谷物语开发60之定制角色其他部位
  • Jpackage
  • 信号电压高,传输稳定性变强,但是传输速率下降?
  • Window Server 2019--11 虚拟专用网络
  • 软件测试python学习