并发控制

学习并发控制的时候我就首先在问:什么是并发控制?为什么要并发控制?怎么样并发控制?带着这些问题学习。

首先,我们要了解什么是并发。并发:顾名思义,就是指多个执行单元同时,并行的执行。那么为什么要并发控制呢?一般来说,如果这些执行单元没有交集的话,那么这些东西就相处的相当融洽。可是问题是,当他们同时要访问共享资源了,那么这个时候就产生一个问题,但是是谁来使用这个资源呢?我们把这个状态称为“竟态”。要处理这个问题,于是就产生并发控制。这个就解决了什么是并发控制还有是为什么要有并发控制。那么我们就要想着怎么样处理这个问题,这就是怎么样并发控制!

linux内核中解决并发控制的方法有自旋锁还有信号量。那么我们就要知道什么是信号量和自旋锁?他们又是怎么处理的?这个时候我们思路就有点清晰了,并发控制是为解决并发问题,其处理的手段有自旋锁和信号量。

我们来看这两个的特点。自旋锁不引起调用者“睡眠”。而信号量则恰恰相反。睡眠指的是堵塞。如果自旋锁没有被占用,调用者则占用,如果被占用则调用者不断的检测,直到自旋锁被释放,自旋"就是"在原地打转"。而信号量则引起调用者睡眠,它把进程从运行队列上拖出去,除非获得锁。这就是它们的"不类"。但是,无论是信号量,还是自旋锁,在任何时刻,最多只能有一个保持者,即在任何时刻最多只能有一个执行单元获得锁。这就是它们的"类似"。从这个我们可以看出,信号量或者自旋锁成为共享资源或者设备,也就是被调用者的表示。

 鉴于自旋锁与信号量的上述特点,一般而言,自旋锁适合于保持时间非常短的情况,它可以在任何上下文使用;信号量适合于保持时间较长的情况,会只能在进程上下文使用。如果被保护的共享资源只在进程上下文访问,则可以以信号量来保护该共享资源,如果对共享资源的访问时间非常短,自旋锁也是好的选择。但是,如果被保护的共享资源需要在中断上下文访问(包括底半部即中断处理句柄和顶半部即软中断),就必须使用自旋锁(这个我自己也没搞懂)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值