linux---内核笔记

内核延时

  • msleep(1)---阻塞式延时1ms
  • mdelay(1)---非阻塞式延时1ms

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
posted @   Charles_hui  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示