进程锁整理

临界资源概念(互斥共享资源)

在多进程中,有很多的资源一次只能供一个进程使用,一次仅供一个进程使用的资源称为临界资源,许多物理设备都属于临界资源,如输入机,打印机等

自旋锁

自旋——》原地打转

如果有一个自旋锁,任务A获取了自旋锁,开始访问临界资源,在任务A释放自旋锁之前,任务B也想获取该自旋锁,则任务B在原地等待,直到任务A释放自旋锁,任务B在原地等待的时候,就是一个自旋的过程,在这个过程中,任务B没有产生阻塞,还是占用CPU的控制权,即处于忙等待的过程中
自旋锁的应用注意

  1. 自旋锁主要是使用在临界资源的访问时间不是很长(Linux内核时钟周期--》4ms)的情况下,可以使用自旋锁
  2. 自旋锁适合于应用在多处理器的环境下或者单处理器抢占式内核的环境下
  3. 在自旋锁上锁的过程中,Linux内核的抢占器是关闭的,解锁后,抢占器被打开
  4. 当一个进程得到自旋锁A,在释放自旋锁A之前,还尝试的获取自旋锁A,会产生死锁。
  5. 一个进程如果获取了一个锁,释放这个锁之前不要尝试的去获取其他的锁
  6. 自旋锁保护的一个临界资源的访问过程是原子过程,该过程不能产生阻塞,如果产生,则有可能会产生死锁
  7. 在中断服务程序中,可以使用自旋锁,但是不能使用信号量(互斥锁)

读写锁

读写锁实际上是一种特殊的自旋锁,它把对共享资源的访问者划分为读者和写者,读者只对共享资源进行读访问,写者则需要对共享资源进行写操作,这种锁相对于自旋锁而言,能提高并发性,因为在多处理器系统中,它允许同时有多个读者来访问共享资源,最大可能的读者数为实际的逻辑CPU数,写者是排他性的,一个读写锁同时只能有一个写者或者多个读者(与CPU数有关),但不能同时既有读者又有写者

信号量

是一个睡眠锁,如果一个进程得不到信号量,该进程就会产生阻塞,进入睡眠状态,当有其他进程释放信号的时候,该进程得到信号量,进入等待运行的状态,等待调度器调度

信号量是一个多值的锁,如果信号量的值是5,则说明同时最多五个进程可以获得信号量,进而访问临界资源,获得信号量,信号量的值减1,信号量的值减到0,说明信号量已经没有了

信号量的PV操作

P操作—获得一个信号量
V操作—释放一个信号量

互斥锁(互斥量/互斥体)

互斥锁是一种特殊的信号量,互斥锁是一个二值的信号量,0和1——》解锁和上锁

自旋锁 VS 信号量(互斥锁)

自旋锁——》忙等待锁
信号量——》睡眠锁(阻塞锁)

  1. 如果临界资源的访问时间比较短(少于几ms),可以用自旋锁
  2. 如果在中断服务程序中,使用锁,只能使用自旋锁
  3. 如果访问临界资源的过程中,使用了可能会产生阻塞的函数,只能使用信号量(使用自旋锁可能会出现死锁)
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值