个人学习笔记---linux内核同步

一  基本概念

临界区:也称为临界段,就是访问和操作共享数据的代码段。



竞争条件: 2个或2个以上线程在临界区里同时执行的时候,就构成了竞争条件。


所谓同步,其实防止在临界区中形成竞争条件。


如果临界区里是原子操作(即整个操作完成前不会被打断),那么自然就不会出竞争条件。但在实际应用中,临界区中的代码往往不会那么简单,所以为了保持同步,引入了锁机制。但又会产生一些关于锁的问题。


死锁产生的条件:要有一个或多个执行线程和一个或多个资源,每个线程都在等待其中的一个资源,但所有资源都已被占用。所以线程相互等待,但它们永远不会释放已经占有的资源。于是任何线程都无法继续,死锁发生。


自死锁:如果一个执行线程试图去获得一个自己已经持有的锁,它不得不等待锁被释放。但因为它正在忙着等待这个锁,所以自己永远也不会有机会释放锁,死锁产生。


饥饿(starvation) 是一个线程长时间得不到需要的资源而不能执行的现象。


二   造成并发的原因


1. 用户空间需要同步的原因

用户程序会被调度程序抢占和重新调度。由于用户程序可能会在任何时刻被抢占,所以会使得一个程序正处于临界区时被被自愿抢占了。如果新调度的进程会操作同一个临界区,那么就会形成竞争。

另外在多处理器中会真正存在两个进程同时在临界区中同时运行的情况


2.    内核中可能造成并发的原因有


1)中断——中断几乎可以在任何时刻异步发生,也就是可能随时打断当前正在运行的代码。


2)软中断和tasklet ——内核能在任何时刻唤醒或调度中断和tasklet,打断当前正在执行的代码。


3)内核抢占——因为内核具有抢占性,所以内核中的任务可能会被另一任务抢占。


4)睡眠及用户空间的同步——在内核执行的进程可能会睡眠,这就会唤醒调度程序从而导致调度一个新的用户进程执行。


5)对称多处理——两个或多个处理器可以同时执行代码。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值