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

互斥锁和自旋锁

1、锁:

自旋锁与‌互斥锁的区别主要体现在以下几个方面:

1. 实现方式

  • 互斥锁‌:属于‌sleep-waiting类型的锁。当一个线程尝试获取已被其他线程持有的互斥锁时,该线程会被阻塞(进入睡眠状态),并释放‌CPU,直到锁被释放后,由操作系统内核唤醒。‌1
  • 自旋锁‌:属于‌busy-waiting类型的锁。当线程尝试获取已被持有的自旋锁时,它会持续在CPU上忙等待(自旋),并反复检查锁是否可用,直到获取锁为止。

2. 开销

  • 互斥锁‌:由于线程在等待锁时会被阻塞并释放CPU,因此减少了CPU的浪费,但存在线程上下文切换的开销。‌
  • 自旋锁‌:在等待锁期间,线程会持续占用CPU资源,如果锁很快被释放,则自旋锁的效率较高;但如果锁被长时间持有,则会导致CPU资源的浪费。

3. 使用场景

  • 互斥锁‌:适用于临界区资源访问时间较长或存在阻塞操作的情况。因为互斥锁允许线程在等待锁时被阻塞,从而释放CPU资源,避免CPU资源的浪费。‌23
  • 自旋锁‌:适用于临界区资源访问时间短且线程竞争不激烈的情况。因为自旋锁在等待锁时不会释放CPU资源,如果能在短时间内获得锁,则效率较高。

4. 初始化和销毁

  • 互斥锁‌:通常使用pthread_mutex_init函数进行初始化,使用pthread_mutex_destroy函数进行销毁。‌4
  • 自旋锁‌:在Linux内核中,自旋锁的初始化和销毁通常与具体的内核数据结构或场景相关,不直接提供通用的初始化和销毁函数。‌3

http://www.mrgr.cn/news/32946.html

相关文章:

  • FlinkPipelineComposer 详解
  • JS 实现游戏流畅移动与按键立即响应
  • GitLab 如何降级?
  • Spring Validation参数校验
  • 【Xrdp联机Ubuntu20.04实用知识点补充】
  • ts 中 ReturnType 作用
  • 【优选算法之双指针】No.2--- 经典双指针算法(下)
  • 简单多状态dp第二弹 leetcode -删除并获得点数 -粉刷房子
  • 【Linux课程学习】make/Makefile:Linux项目自动化构建工具
  • 【Godot4.3】胶囊形的偏移获取法
  • java实现LRU 缓存
  • [python]从零开始的PySide安装配置教程
  • 操作系统篇
  • Vue.js与Flask后端配合
  • linux网络编程5
  • Dell R720 使用 ESXI 系统直通 p40 等显存大于16g 的显卡使用 EFI 引导无法打开虚拟机。
  • C++——模板初阶
  • 智慧校园建设解决方案建设系统简介
  • C Prime Plus 第6章习题
  • 索引的使用
  • Hadoop的安装
  • 【推广】图书|2024新书《大模型RAG实战:RAG原理、应用与系统构建》汪鹏、谷清水、卞龙鹏等,机械工业出版社
  • CDVAE项目环境配置
  • cv环境设置
  • expressjs 如何封装接口响应数据
  • 用 HTML + JavaScript DIY 一个渐进式延迟法定退休年龄测算器