《Linux驱动基础篇》- Linux内核并发问题

        同步是对并发流访问数据的一种要求,它要求并发流在访问共享数据时,不会出现竞争、数据不一致的的结果。

        对于并发流访问共享数据可以分为两种,一种是体积较小的整型数据、位数据,这类采用原子操作实现;另一种是共享区体积较大,可能是多个数据结构,这类采用加锁的方式来实现。 这两种都是保障对共享数据访问的原子性的手段。

        前者的实现主要是通过硬件来实现的,主要的方式有使用原子指令、锁内存的方式;而后在的加锁是一种机制,锁也可以看做一个对象。这里要求并发流对共享数据访问时,必须用锁来锁定共享资源,不让其他并发流来访问。当然如果得不到锁,你就没有权利访问共享资源,你可以忙等、或者休眠。

        中断屏蔽:采用这种方法中断就不会产生,这样中断和进程的并发就没有可能,同时由于进程的调度也是靠中断来实现的,因此进程的调度也不会发生。但是异步I/O、进程调度都需要依赖于中断,长时间的中断屏蔽会对系统性能造成影响,因此中断屏蔽执行的时间尽可能的要短。

        原子操作:上面提到了从硬件的角度来实现原子操作,适用于位和整型。

        自旋锁:不过不能获取到自旋锁CPU会忙等待,也就是空转。这里使用自旋锁需要注意的问题是,1.空转是占用cpu的,因此空转时间越短越好,对于那些较小的临界区它们退出比较快,所以比较适合。2.递归的获取自旋锁是会造成自死锁的。

        读写自旋锁:在自旋锁的基础上要上几点要求 1.多个读同时进行  2.写互斥  3.读写互斥

        顺序锁:也是自旋锁,附加条件是 1.读写不互斥  2.写互斥

        信号量:同自旋锁类似,但是获取不到信号量时会睡眠。由于信号量是进程级别的,进程切换上下文开销大,因此适应于那些耗时的资源处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值