linux内核同步机制 (1) 信号量和自旋锁 的特点

semaphore 信号量

信号量的特点:

1.用于进程和进程之间的同步

2.允许有多个进程进入临界区代码执行

3.进程获取不到信号量锁会陷入休眠,并让出CPU

4.被信号量锁保护的临界区代码允许睡眠

5.本质是基于进程调度器,UP和SMP下的实现无差异

6.不支持进程和中断之间的同步

spinlock自旋锁

自旋锁的特点:

1.spinlock是一种死等的锁机制。

2.semaphore可以允许多个执行单元进入,spinlock不行,一次只能有一个执行单元获取锁并进入临界区,其他的执行单元都是再门口不断的死等

3.执行时间短。由于spinlock死等这种特性,如果临界区执行时间太长,那么不断在临界区门口“死等”的那些执行单元是多么浪费时间啊?

4.可以在中断上下文执行。由于不睡眠,因此spinlock可以在中断上下文中适用。

  小贴士:中断上下文代码不允许睡眠,也不允许调用那些可能会引起睡眠的函数!

spinlock的系列函数

void spin_lock(spinlock_t *lock) //进程和进程之间的同步

void spin_lock_bh(spinlock_t *lock) //涉及到和本地软中断之间的同步

void spin_lock_irq(spin_lock_t *lock)//涉及到和本地硬件中断之间的同步

void spin_lock_irqsave(lock,flags) //涉及到和本地硬件中断之间的同步并保存本地中断状态

int spin_trylock(spinlock_t *lock) //尝试获取锁,如果成功返回非零值,否则返回领值

 

Linux 内核同步简介 https://blog.csdn.net/zhoutaopower/article/details/86586527

Linux 内核同步(一):原子操作 https://blog.csdn.net/zhoutaopower/article/details/86597401

Linux 内核同步(二):自旋锁(Spinlock) https://blog.csdn.net/zhoutaopower/article/details/86598839

Linux 内核同步(三):读-写自旋锁(rwlock) https://blog.csdn.net/zhoutaopower/article/details/86605987

Linux 内核中的内存屏障:https://blog.csdn.net/zhoutaopower/article/details/86500665

Linux 内核同步(四):顺序锁(seqlock):https://blog.csdn.net/zhoutaopower/article/details/86611798

Linux 内核同步(五):信号量(semaphore):https://blog.csdn.net/zhoutaopower/article/details/86614945

Linux 内核同步(六):互斥体(mutex):https://blog.csdn.net/zhoutaopower/article/details/86627438

Linux 内核同步(七):RCU机制:https://blog.csdn.net/zhoutaopower/article/details/86646688

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值