linux---内核笔记

发布时间 2023-12-17 21:43:34作者: Charles_hui

semaphore

  • 用于进程和进程之间的同步
  • 允许有多个进程进入临界区代码执行
  • 进程获取不到信号量锁会陷入休眠,让出cpu
  • 信号量本质是基于进程调度器,UP和SMP下的实现无差异。
  • 被信号量锁保护的临界区代码允许睡眠,这是和自旋锁最大的区别之一。
  • 不支持进程和中断之间的同步,这是和自旋锁最大的区别之一。

spinlock

  • feature
    1.spinlock是一种死等的机制
    2.spinlock一次只能有一个执行单元获取锁进入临界区,其他执行单元只能在门口不断死等。
    3.spinlock要求执行时间短。由于死锁的特性,若临界区执行时间太长,则其它执行单元要在临界区门口不断死等,极度浪费cpu资源。
    4.spinlock可以在中断上下文执行。(由于不睡眠???)
  • scene
    1.void spin_lock(spinclock *lock)//进程和进程间的同步
    2.void spin_lock_bh(spinclock *lock)//涉及和本地软中断间的同步
    3.void spin_lock_irq(spinclock *lock)//涉及和本地硬件中断间的同步
    4.void spin_lock_irqsave(lock,flags)//涉及和本地硬件中断间的同步并保存本地中断状态。
    5.int spin_trylock(spinlock_t *lock)//尝试获取锁,成功返回0