spin_lock & mutex_lock的差别?

spin_lock & mutex_lock的差别?

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

本文由该问题引入到内核锁的讨论,归纳例如以下

为什么须要内核锁?
多核处理器下,会存在多个进程处于内核态的情况,而在内核态下,进程是能够訪问全部内核数据的,因此要对共享数据进行保护,即相互排斥处理

有哪些内核锁机制?
(1)原子操作

atomic_t数据类型,atomic_inc(atomic_t *v)将v加1

原子操作比普通操作效率要低,因此必要时才使用,且不能与普通操作混合使用

假设是单核处理器,则原子操作与普通操作同样
(2)自旋锁

spinlock_t数据类型,spin_lock(&lock)和spin_unlock(&lock)是加锁和解锁

等待解锁的进程将重复检查锁是否释放,而不会进入睡眠状态(忙等待),所以经常使用于短期保护某段代码

同一时候,持有自旋锁的进程也不同意睡眠,不然会造成死锁——由于睡眠可能造成持有锁的进程被又一次调度,而再次申请自己已持有的锁

假设是单核处理器,则自旋锁定义为空操作,由于简单的关闭中断就可以实现相互排斥
(3)信号量与相互排斥量

struct semaphore数据类型,down(struct semaphore * sem)和up(struct semaphore * sem)是占用和释放

struct mutex数据类型,mutex_lock(struct mutex *lock)和mutex_unlock(struct mutex *lock)是加锁和解锁

竞争信号量与相互排斥量时须要进行进程睡眠和唤醒,代价较高,所以不适于短期代码保护,适用于保护较长的临界区
相互排斥量与信号量的差别?(转载但找不到原文出处)
(1)相互排斥量用于线程的相互排斥,信号线用于线程的同步

这是相互排斥量和信号量的根本差别,也就是相互排斥和同步之间的差别

相互排斥:是指某一资源同一时候仅仅同意一个訪问者对其进行訪问,具有唯一性和排它性。但相互排斥无法限制訪问者对资源的訪问顺序,即訪问是无序的

同步:是指在相互排斥的基础上(大多数情况),通过其他机制实现訪问者对资源的有序訪问。在大多数情况下,同步已经实现了相互排斥,特别是全部写入资源的情况必然是相互排斥的。少数情况是指能够同意多个訪问者同一时候訪问资源
(2)相互排斥量值仅仅能为0/1,信号量值能够为非负整数

也就是说,一个相互排斥量仅仅能用于一个资源的相互排斥訪问,它不能实现多个资源的多线程相互排斥问题。信号量能够实现多个同类资源的多线程相互排斥和同步。当信号量为单值信号量是,也能够完毕一个资源的相互排斥訪问
(3)相互排斥量的加锁和解锁必须由同一线程分别相应使用,信号量能够由一个线程释放,还有一个线程得到
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118362.html原文链接:https://javaforall.net

(0)
上一篇 2021年12月7日 上午10:00
下一篇 2021年12月7日 上午11:00


相关推荐

  • OpenClaw CLI 完整命令参考手册 ​

    OpenClaw CLI 完整命令参考手册 ​

    2026年3月13日
    2
  • 多所高校集体官宣:严禁安装OpenClaw

    多所高校集体官宣:严禁安装OpenClaw

    2026年3月13日
    2
  • 2021年嵌入式面试题汇总(最新经典)

    2021年嵌入式面试题汇总(最新经典)写在前面 秋招嵌入式开发方向 经过了很多场的笔试与面试 在准备的过程中看了非常多的资料 现在把他们整理一下 有的资料看过了觉得不错就保存下来了 如果有不对的地方 欢迎批评指正 侵权联删 慢慢更新过程中 目录 1 c 语言内存模型 2 C 语言中的变量定

    2026年3月18日
    2
  • 矢量积与叉乘_向量积叉乘的几何意义

    矢量积与叉乘_向量积叉乘的几何意义矢量叉乘,向量外积原创不易,路过的各位大佬请点个赞矢量叉乘,向量外积矢量叉乘,向量外积1.矢量叉乘定义2.模长3.方向4.坐标运算6.叉乘矩阵(斜对称矩阵)6.叉乘运算规则1.矢量叉乘定义定义两个向量a\mathbf{a}a和b\mathbf{b}b,他们的叉乘可以写为a×b\mathbf{a}\times\mathbf{b}a×b本质上向量叉乘为向量旋转,满足右手螺旋准则;叉乘结果是一个向量,向量模长是向量A,B组成平行四边形的面积;向量方向是垂直于向量A,B组成的平面;也

    2025年7月28日
    4
  • Vue上传图片_解调的三种方式

    Vue上传图片_解调的三种方式项目中需要上传图片可谓是经常遇到的需求,本文将介绍3种不同的图片上传方式,在这总结分享一下,有什么建议或者意见,请大家踊跃提出来。没有业务场景的功能都是耍流氓,那么我们先来模拟一个需要实现的业务场景。假设我们要做一个后台系统添加商品的页面,有一些商品名称、信息等字段,还有需要上传商品轮播图的需求。我们就以Vue、Element-ui,封装组件为例子聊聊如何实现这个功能。其他框架或者不用框架…

    2022年10月16日
    5
  • HTML期末大作业~餐饮文化学生网页设计作业(HTML+CSS+JavaScript)[通俗易懂]

    HTML期末大作业~餐饮文化学生网页设计作业(HTML+CSS+JavaScript)[通俗易懂]HTML期末大作业~基于HTML+CSS+JavaScript饮食网站设计与实现关于HTML期末网页制作,大作业A+水平~饮食网页作业HTML+CSS+JavaScript实现,共有联系我们在线留言资质荣誉行业资讯成功案例新闻资讯产品中心发展历史关于我们8个页面!原始HTML+CSS+JS页面设计,可以学习学习,大学网页设计作业,~这是一个不错的网页制作,画面精明,非常适合初学者学习使用。作品演示1.关于我们2.产品中心3.新闻资讯4.资质荣誉5.在线留言6.

    2025年10月2日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号