【005 基础知识】Linux同步机制?

一、什么是同步机制?

并发竞争本质上是多个线程对共享资源的访问存在冲突。使用同步机制(如互斥锁、信号量等),可以确保共享资源在任何时刻只有一个线程访问。如不采取必要的同步措施,将会对一些关键数据结构进行交错访问和修改,从而导致这些数据结构状态的不一致,进而导致系统崩溃。

因此,为了确保系统高效稳定有序地运行,linux 必须要采用同步机制。


二、Linux同步机制有哪些?

  • 原子操作
  • 自旋锁 Spin Lock
  • 读写自旋锁
  • 顺序锁(seqlock,只包含在2.6内核及以后的版本中)
  • 信号量 semaphore
  • 读写信号量
  • 互斥体 mutex 
  • 大内核锁(BKL,Big Kernel Lock,只包含在2.4内核中,不讲)
  • 大读者锁(brlock,只包含在2.4内核中,不讲)
  • RCU(对读写锁的优化,只包含在2.6内核及以后的版本中)


三、什么是死锁?如何避免死锁?

定义:死锁指的是两个或多个进程或线程互相等待对方所持有的资源而无法继续执行的情况。这种情况下,每个进程都在等待其他进程释放它需要的资源,但是没有任何一个进程会主动释放自己所持有的资源,导致所有进程都无法前进,形成了死循环,这就是死锁。

死锁产生通常需要满足以下四个必要条件:

  1. 互斥条件:任意时刻一个资源只能给一个进程使用;

  2. 不可剥夺条件:进程已获得的资源,在未使用完之前,不能强行剥夺;​​​​​​

  3. 请求和保持条件:一个进程因请求资源而阻塞(睡眠、被高优先级的中断打断)时,对已获得的资源保持不放。

  4. 循环等待条件:形成一个进程等待环路,环路中每一个进程所占有的资源同时被另一个进程申请。

只有当这四个条件同时满足时,死锁才会发生。因此,预防死锁的方法就是破坏这四个必要条件之一或多个。

死锁预防:

我们可以通过破坏死锁产生的4个必要条件来 预防死锁,由于资源互斥是资源使用的固有特性是无法改变的。


四、参考内容

死锁产生的原因及四个必要条件 - 知乎

死锁的四个必要条件_Hyacinth_Dy的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kashine

你的鼓励将是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值